Added transient header support for TransportMessage

 - Transient headers are headers that can be set on messages yet are not serialized with them.
 - Changed header accessors/mutators so header manipulation will be done directly on the request (to void NPE with transport message headers when dealing with maps that can potentially be null)
 - Added a randomVersionCompatibleWith(Version) method to the test infrastructure to help with bwc testing
(and also the fact that it will be lost on serialization, etc.)