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
Can you add javadocs to this method? In particular I think it's important to explain the kind of use-case that this API exists for.