Add a thread-local RequestContext

Currently just contains the remote address of the client connection that made the request
Review feedback
Remove NiftyContext class

This file, added in a recent commit, actually became RequestContext, but I forgot to delete the original and committed it. It isn't used anywhere.
Make frame codec a configurable part of the server
Add custom nifty processors
Remove header transport option
Duplex protocol and transport factories
Integrate duplex protocol factories
Add convenience overrides for start() method on NettyServerTransport
Fix bug in the new frame decoder
Add 'final' keyword to ThriftMessage fields
Modifications to support sending out-of-order responses in some scenarios
Log channel exceptions instead of just swallowing them
Don't encode anything if outgoing message is too long

This avoids an extra exception which happened because the too-long-frame exception already triggered closing the channel, but then we try to send an empty frame in it's place, and get an exception because the channel is already closed so we can't send anything.
Configure load tester netty logging to go to SLF4J

Netty is configured by default to send its logging messages through JDK logging, but nifty-load-tester uses SLF4J
Fix the license header in NiftyExceptionLogger
Enable connecting clients using other protocols
Fix for out-of-order support

Need to update "last written response" counter on the out-of-order path too, otherwise the channel eventually gets blocked after it has received lots of requests, thinking it hasn't written responses for any of them yet so it shouldn't keep taking more.
Add custom log pattern for nifty load tester
Skip writing responses if client disconnected while the request was running