WIP: MarshalBinary

Taking inspiration from @bjeanes' Playground code here: http://play.golang.org/p/uFj1mdBKG6.

What this is attempting to do is build a binary representation from a message (i.e. the opposite of the `Decode` function), in preparation for sending it back down the pipe and out to the world.

I still have no idea what I'm doing here, but this *feels* like the right track.
To avoid using `unsafe`, we could also just dump out the payload into a different buffer, check its size, update the header, write the header out, then concatenate the two byte arrays, but doesn't matter so much I think.