*adding check for empty message_ptr before attempting to send the
message
*allowing copy construction (and assignment, which was unintentionally
already allowed): we don't want to have message object that have not had
their content encoded, which is why we only allow them to be created
through producer. However, once a message is created, the content of it
can be copied and assigned to another message. We dissalow move, as that
would leave the original message empty.
*improving tests
improving comments
adding more tests