performance improvements: squash messages, and NIO

     - fit as many messages (that are in the queue) into the MTU as possible.
     - convert to NIO.

In addition to any NIO improvements,
     this will offer a performance improvement when the incoming message rate per the time it takes to call blockingSend() goes above one.