INT-1807 Add Mechanism For Headers with TCP

TCP has no standard message structure. Therefore, the
TCP implementation previously only transferred the message
payload.

If someone wanted to convey header information, they would have
to write their own wrapper and/or use Java serialization for
the entire message.

This change provides a strategy to allow users to determine
which headers are transferred, and how.

Users are free to inject their own implementation of a
MessageConverter, to convert the message to a byte[] and
vice versa.

A simple JSON implementation is provided to allow users to
specify the header names, and Jackson is used to convert
the headers (and payload) to a json stream with two fields
"headers" and "payload".