+1 to requiring users to specify the decoder in all cases.

And yes, we should revisit how exactly we're using MsgBytes and Payload. The original idea was that MsgBytes (if used) would contain a binary representation of the entire message object, hence the name. This also explains why arbitrary text, JSON, and XML data was put in the Payload instead; that's data contained *within* a message object, not a representation of a full struct.

That model has probably outgrown it's usefulness, though. Maybe it makes more sense to replace "MsgBytes" w/ "RawMsgInput", which would always be populated w/ the raw, chunked input data for the given message, whether or not it represented the entire message object?