Previously the key reader function (convert KeyId to Key) can take a
&'a T and return a &'a [u8]. That was inspired by C void *, looked
flexible - in theory T could have some RefCell and do whatever it wants.
However, in practise, passing the radix buffer itself to the key reader
function is often desired and there is no easy way to do that cleanly.
This patch replaces the key reader arguments to an enum that support
different dedicated types of key readers - zero-copy from key buffer,
construct something from the radix buffer, or from both buffers.
This adds flexibility like embedding other data directly into the radix
buffer with an optional external key buffer as a dependence.