Move Format to Message (not subtypes) and clean up hackarounds

We want Message to always be serialized with a discriminator, and
it will always be a sealed trait, so it makes sense to do the
serialization at the Message level and make all the subtype
serializers into private implementation details.
This also removes the hacks we had (sendJsonFilter, etc.) to
add the discriminator later in the process.