Move DefaultChannelPipeline.notifyHandlerException() to DefaultChannelHandlerContext / Always trigger exceptionCaught() at the handler that raised an exception

- Related: #1118
Simplify ChannelInboundMessageHandlerAdapter.inboundBufferUpdated() implementation
Make PlatformDependent work with the platforms without unaligned access support
Fix checkstyle
Move exceptionCaught(..) back to ChannelHandler. Related to [#1118]
Make hasUnsafe() return true only when all necessary low level operations are available for reliable direct buffer access
Provide a way to implement an ChannelInbound/OutboundMessageHandler conveniently without extending an adapter class

- Add ChannelHandlerUtil and move the core logic of ChannelInbound/OutboundMessageHandler to ChannelHandlerUtil
- Add ChannelHandlerUtil.SingleInbound/OutboundMessageHandler and make ChannelInbound/OutboundMessageHandlerAdapter implement them.  This is a backward incompatible change because it forces all handler methods to be public (was protected previously)
- Fixes: #1119
Change ByteBufAllocator.buffer() to allocate a direct buffer only when the platform can handle a direct buffer reliably

 - Rename directbyDefault to preferDirect
 - Add a system property 'io.netty.prederDirect' to allow a user from changing the preference on launch-time
 - Merge UnpooledByteBufAllocator.DEFAULT_BY_* to DEFAULT
Add more variants of ByteBufAllocator.ioBuffer() / Update Javadoc
Warn in case of incomplete low-level API
Re-enable some critical tests
Fix a bug in PoolArena and PoolSubpage where subpage pools are not updated correctly

- Make PoolSubpage a linked list node in the pool
- Now that a subpage is added to and removed from the pool correctly, allocating a subpage from the pool became vastly simpler.
Make field access via ByteBuf.read/write*() faster by avoiding unnecessary boundary checks

- also disabled a time consuming test that is actually a regression test
Use _set* in AbstractByteBuf.write*()
Add UnpooledUnsafeDirectByteBuf and use it when low-level access is available

- Remove PooledUnsafeDirectByteBuf.setMedium() which is redundant
- Fix constructor visibility
Fix checkstyle
Fix infinite recursion when transferring data between different type of buffers / Add ByteBuf.hasMemoryAddress/memoryAddress()

- Fixes: #1109 and #1110
Fix checkstyle
Reduce the amount of memory used for handler names

- Fixes #1123
Fix a problem in SslHandler where it doesn't work with TLS False Start

.. as suggested by @justinsb