MessageBody represents the request or response body of a [class@Message].
Note that while length always reflects the full length of the message body, data is normally
null, and will only be filled in after [[email protected]] is called. For client-side messages,
this automatically happens for the response body after it has been fully read. Likewise, for server-side messages, the request body is
automatically filled in after being read.
As an added bonus, when data is filled in, it is always terminated with a `\0` byte (which is not reflected in length
).