Correctly handle remove from epoll and EPOLLRDHUP. Also fix a bug with removing EPOLLIN and EPOLLOUT
HttpObjectDecoder.invalidChunk() should return LastHttpChunk

because the decoder will enter 'BAD_MESSAGE' state and will not produce any chunk since then.
Ensure that the last bad chunk is LastHttpChunk
Fix a bug where HttpObjectAggregator doesn't always produce FullHttpMessage

- Fixes #2182
- Always convert an unfull invalid message to a full message
Fix a regression which could lead to GenericFutureListeners never been notifed. Part of [#2186].

This regression was introduced by commit c97f2d2de00ad74835067cb6f5a62cd4651d1161
Expose a callback in HttpObjectAggregator to handle oversized messages

- Related: #2211
Overall clean-up of HttpObjectAggregator / Handle oversized response differently

- Related: #2211
Remove the deprecated constant field

Exposing the constant as a public static final field is usually not a
good idea because it gives less flexibility to us when we happen to
change our internal implementation.
Added a test for oversized HTTP responses
Add an operation that resets the state of HttpObjectDecoder

Motivation:

Currently, it is impossible to give a user the full control over what to do in response to the request with 'Expect: 100-continue' header.  Currently, a user have to do one of the following:

- Accept the request and respond with 100 Continue, or
- Send the reject response and close the connection.

.. which means it is impossible to send the reject response and keep the connection alive so that the client sends additional requests.

Modification:

Added a public method called 'reset()' to HttpObjectDecoder so that a user can reset the state of the decoder easily.  Once called, the decoder will assume the next input will be the beginning of a new request.

HttpObjectAggregator now calls `reset()`right after calling 'handleOversizedMessage()' so that the decoder can continue to decode the subsequent request even after the request with 'Expect: 100-continue' header is rejected.

Added relevant unit tests / Minor clean-up

Result:

This commit completes the fix of #2211
Fix a memory leak in HttpObjectAggregatorTest
Fix another leak in HttpObjectAggregatorTest by removing redundant code
SPDY: remove SPDY/3 support
Avoid unnecessary IllegalStateException in ChunkedWriteHandler

Motivation:
ChunkedWriteHandler can sometimes fail to write the last chunk of a ChunkedInput due to an I/O error.  Subsequently, the ChunkedInput's associated promise is marked as failure and the connection is closed.  When the connection is closed, ChunkedWriteHandler attempts to clean up its message queue and to mark their promises as success or failure.  However, because the promise of the ChunkedInput, which was consumed completely yet failed to be written, is already marked as failure, the attempt to mark it as success fails, leading a WARN level log.

Modification:
Use trySuccess() instead of setSuccess() so that the attempt to mark a ChunkedInput as success does not raise an exception even if the promise is already done.

Result:
Fixes #2249
[#2254] Fix regression in handling autoRead and Channel.read()

This regression was introduced by e0b39159657c9eb711047bc32367537c4870d467
Directly use memory addresses for gathering writes to reduce gc pressure. Part of [#2239]

This also does factor out some logic of ChannelOutboundBuffer. Mainly we not need nioBuffers() for many
transports and also not need to copy from heap to direct buffer. So this functionality was moved to
NioSocketChannelOutboundBuffer. Also introduce a EpollChannelOutboundBuffer which makes use of
memory addresses for all the writes to reduce GC pressure
[#2254] Correctly handle Channel.read() and ChannelHandlerContext.read()

This includes also when it is called from channelRead(...) and channelReadComplete(...) methods.
Fix check to clear READ_OP and EPOLLIN. Part of [#2254]
Apply receive timeout to commPort when using RxtxChannel. Part of [#1390]
Upgrade JMH to 0.4.1 and make use of @Params.