codec: expose Number of Bytes Read by the Decoder
This allows users know where in the stream they are,
supporting consuming and truncating use-cases
e.g. given a byte slice, decode a user from it,
and return the remainder of the byte slice
to other module for further processing.
Fixes #241
Fixes #235