Make `readMessage` return the built library

Returning the library from `readMessage` allows it to be reused. This
library can then be reused, for example if subsequent messages are sent
without the definition prefix.
Make type param optional on reads

If the type parameter is not supplied then it will be determined by
reading the first byte of the data.

This change allows the data to specify it's own type rather than the
client having to dictate what it will be.

It also allows Argot Messages to be streamlined, sending a first message
containing definitions and then sending subsequent messages containing
only the data body prefixed by the stream id.