Improve TcpServerReactor's reply handling

Previously a new Consumer that can send a response was registered for
every request that's received. This had the problem that, if a
response was not sent, there was no reasonable place for the consumer
to be unregistered. A secondary problem was that it introduced extra
object creation into the handling of each request.

A single Consumer that is used to send all responses is now registered
with the Reactor. The previously approach accessed the TcpConnection
needed to send the response by capturing it in the Consumer. With only
a single Consumer an alternative approach is needed. Connection's are
now stored in a weak map, keyed by their unique connection id. The id
is stored in the event headers so that it can be used to look up the
connection when a response, if any, is being sent.
Merge branch 'improve-reply-handling'