Consolidates the conversion of messages to/from byte buffers
and provides a rolling message buffer. ByteBuffers can be
pushed in and messages will be extracted, accumulated, and
available for retrieval. The MessageBuffers returned are generally
not thread safe and are meant to be used within a single message
processing thread. MessageProtocol implementations themselves should
be thread safe.
The specific serialization protocol used is up to the implementation.