Checkpoint work on a new typing approach based on std::iter module.
This makes heavier use of associated types, which in some cases is easier to read, and in others is harder to read.
The downside is that we now return explicitly typed struct values instead of the previous approach where we returned a trait object (RcCodec<T>), which also means we need to make the struct definitions public. Not ideal, but it's sort of the way of the Rust.
The upside is that we can keep pretty much all the codec allocations on the stack, and we can avoid some of the indirection and boxing that we had in the previous approach.
In the end, this may be a wash, which is why it's being shunted off to a separate branch for now.