Replace TypeParameterFinder with TypeParameterMatcher

 - We can avoid reflective matching using byte code generation.
 - Better matching performance when message type is Object
Use correct index when try to find the type of the message
Fix a bug where a closed channel was tried to register with the eventloop
Use byte code generation if Javassist is available.
Add a system property that disables Javassist
Replace ChannelHandlerUtil.unfoldAndAdd() with MessageBuf.unfoldAndAdd() / Remove unused methods in ChannelHandlerUtil
Remove unreachable code
Rename ByteBufUtil to BufUtil and move ChannelHandlerUtil.freeMessage() there / Remove ChannelHandlerUtil
Take advantage of buffering in HttpSnoopServer

- 50% higher requests/sec with pipeline enabled
Reduce the number of unnecessary Selector.wakeup() / Fix a bug where channelReadSuspended() generates garbage
Move flushTaskInProgress to AbstractUnsafe

.. because it's referenced only there.  Also did tiny optimizations.
Faster memory copy between direct buffer and byte array
Faster memory copy between direct buffer and byte array (part 2)
Fix checkstyle
[#1025] Allow to add extra headers to the websocket handshake response
Use PhantomReference insteadof WeakReference for resource leak detection
Call PhantomReference.clear() from close()
Revert the previous commit (sorry!)
Reduce the potential contention caused by ResourceLeakDetector sampling
Add begin/endFlush() and closeOnFailedFlush to ChannelOutboundMessageHandlerAdapter / Make ChannelInboundMessageHandlerAdapter stop processing on first exception to avoid excessive exceptionCaught() events against pipelined messages.