From a usability point of view I see the point of `setBody()` accepting multiple types: that would force the *implementation* of Http\Message to deal with a number of possible types, and that's OK because it's a one-off job that'll be done in the library, and only there. On the contrary, for `getBody()`, I would enforce a single return type to never offload the work of having to deal with several potential type to the consumer of the library. That would violate DRY. And yes, that's to the detriment of speed, but how much? Are we really discussing saving a share of a µS of CPU time for every HTTP message we process? How long does it take just to *transmit* this message?