Added explicit reader and writer types to API

When reading data from a stream using the Fixed encoding, we need to
maintain state (bytes remaining) so we know when to finish. Previously,
this state was created by partially applying the read function, but this
behaviour is non-obvious.

Note: this is a backwards-incompatible change.