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
I think it would be more flexible if the keys were objects? (you could have composite keys, etc.)