refactoring of the Transport SendData code.
1) State shedding modifications to TransactionState
   In a number of cases, we were preserving state (in the form of SipMessages
   and DnsResults) in cases where we did not really need them any more. For
   example, once we have transmitted a response, there is no need
   to preserve the full SipMessage for this response (the raw retransmit buffer
   is sufficient). Also, INVITE requests do not need to be maintained once
   a final response comes in (since there is no possibility that we'll need to
   send a simulated 408 or 503 to the TU, nor will we need to construct a CANCEL
   request using the INVITE, nor will we need to retransmit). Similarly, once we
   have received a final response for a NIT transaction, we no longer need to
   maintain the original request or the retransmit buffer. Lastly, if we are
   using a reliable transport, we do not need to maintain retransmit buffers
   (although we may need to maintain full original requests for simulated
   responses and such).
   This change has basically no impact on reliable NIT performance, but a huge
   impact on non-reliable and INVITE performance. Prior to this change, either
   NIT UDP or INVITE TCP testStack would exhaust main memory on my laptop (with
   4GB of main memory), bringing progress to a complete halt on runs longer than
   15 seconds or so. I did not bother trying INVITE UDP, but that works now too.
2) Reduction in buffer reallocations while encoding a SipMessage
   TransportSelector now keeps a moving average of the outgoing message size,
   which is used to preallocate the buffers into which SipMessages are encoded.
   This ends up making a small difference in testStack when linked against google
   malloc, but a larger difference when linked against OS X's (horrible) standard
   malloc.