[#1222] Correctly handle the case when a MessageToMessageEncoder encodes to ByteBuf and the next outbound buffer is of type ByteBuf
Let ProtobufEncoder extend MessageToByteEncoder which makes more sense. Related to [#1222]
[#1221] Make sure HttpObjectAggregator 100-Continue buffer is not released
Revert "Let ProtobufEncoder extend MessageToByteEncoder which makes more sense. Related to [#1222]"

This reverts commit 6a9d055f578bc85eb7780dcc5484aa11e9da50f6.
Fix Javadoc issues. Replace Upstream with Inbound and Downstream with Outbound.
Make HttpPostRequestDecoder.addHttpData() and getFileUpload() protected

.. so that a user can extend it to get notified when changes are made
Use unfoldAndAdd(..) for now
Log various properties at startup time for easier diagnosis
Allow overriding the default allocator properties and log them / Prettier log
Fix DefaultChannelPipeline.first() so that it returns null when only the sentinel handlers remain (this is how DefaultChannelPipeline.last() works already)
Deprecate Bootstrap.shutdown() and use EventLoopGroup.shutdown() wherever possible

There are still some tests that use Bootstrap.shutdown() though.  They need non-trivial refactoring, which will come soon.
Remove MultithreadEventExecutorGroup.DEFAULT_POOL_SIZE

- We should never define a default nThread for MultithreadEventExecutorGroup because we don't know what a user do with it.
Add MultithreadEventLoopGroup.DEFAULT_EVENT_LOOP_THREADS / Add DefaultThreadFactory

- Allow overriding the default thread factory when a user specified no thread factory
Keep Socket/SctpTestPermutation from creating too many event loops

- Also made the event loops created by *TestPermutation use daemon threads for simplicity (i.e. no need to shut down the event loops)
Remove special handling of Object[] in codec framework (a.k.a unfolding)

- Fixes #1229
- Primarily written by @normanmaurer and revised by @trustin

This commit removes the notion of unfolding from the codec framework
completely.  Unfolding was introduced in Netty 3.x to work around the
shortcoming of the codec framework where encode() and decode() did not
allow generating multiple messages.

Such a shortcoming can be fixed by changing the signature of encode()
and decode() instead of introducing an obscure workaround like
unfolding.  Therefore, we changed the signature of them in 4.0.

The change is simple, but backward-incompatible.  encode() and decode()
do not return anything.  Instead, the codec framework will pass a
MessageBuf<Object> so encode() and decode() can add the generated
messages into the MessageBuf.
Fix typo
Fix IndexOutOfBoundsException raised when numHeapArenas and numDirectArenas differ

- Fixes #1227
Fix misleading example in ByteBuf
Fix performance regression which was caused by calling the fireInboundBufferUpdated() a way to often

* Also use a ThreadLocal for the decoder buffer to safe space as it is cheap
Optimize to minimize volatile reads to access next buffer in codec framework