Resurrect deregistration of a Channel

Motivation:
We thought it would be a good idea to remove the possiblity to deregister a Channel from it's EventLoop in the past. While prepare for one of our changes (using a FJP) for doing the IO we noticed it will be quite easy to have the deregistration implemented while still make sure everything is handled in the right order. To make this happen we need to resurrect the deregister() method.

Modification:
Mainly revert commit c149f4bcc0c0d02aa1abcd5e39c155a9e598822e as preparation.

Result:
The deregister, fireChannelUnregistered, channelRegistered method was added back
Revert "Pass eventLoop and childEventLoopGroup as Channel constructor parameters"

Motivation:
Change the semantics back to what we had in 4.x to allow re-register again.

Modification:
Revert commit e743a27e752f0badaf71688457793d0aa365a3ac

Result:
The sematics are again the same as in 4.x.

This reverts commit e743a27e752f0badaf71688457793d0aa365a3ac.

Conflicts:
	testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketTestPermutation.java
	transport-sctp/src/main/java/io/netty/channel/sctp/nio/NioSctpChannel.java
	transport-sctp/src/main/java/io/netty/channel/sctp/nio/NioSctpServerChannel.java
	transport-sctp/src/main/java/io/netty/channel/sctp/oio/OioSctpServerChannel.java
	transport-udt/src/main/java/io/netty/channel/udt/nio/NioUdtByteAcceptorChannel.java
	transport-udt/src/main/java/io/netty/channel/udt/nio/NioUdtByteRendezvousChannel.java
	transport-udt/src/main/java/io/netty/channel/udt/nio/NioUdtMessageAcceptorChannel.java
	transport-udt/src/main/java/io/netty/channel/udt/nio/NioUdtMessageRendezvousChannel.java
	transport-udt/src/main/java/io/netty/channel/udt/nio/NioUdtProvider.java
	transport-udt/src/test/java/io/netty/test/udt/nio/NioUdtByteAcceptorChannelTest.java
	transport-udt/src/test/java/io/netty/test/udt/nio/NioUdtByteConnectorChannelTest.java
	transport-udt/src/test/java/io/netty/test/udt/nio/NioUdtMessageAcceptorChannelTest.java
	transport-udt/src/test/java/io/netty/test/udt/nio/NioUdtMessageConnectorChannelTest.java
	transport/src/main/java/io/netty/bootstrap/AbstractBootstrap.java
	transport/src/main/java/io/netty/bootstrap/Bootstrap.java
	transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java
	transport/src/main/java/io/netty/channel/AbstractChannel.java
	transport/src/main/java/io/netty/channel/AbstractServerChannel.java
	transport/src/main/java/io/netty/channel/MultithreadEventLoopGroup.java
	transport/src/main/java/io/netty/channel/ServerChannel.java
	transport/src/main/java/io/netty/channel/SingleThreadEventLoop.java
	transport/src/main/java/io/netty/channel/ThreadPerChannelEventLoopGroup.java
	transport/src/main/java/io/netty/channel/local/LocalServerChannel.java
	transport/src/main/java/io/netty/channel/nio/AbstractNioMessageChannel.java
	transport/src/main/java/io/netty/channel/nio/AbstractNioMessageServerChannel.java
	transport/src/main/java/io/netty/channel/oio/AbstractOioByteChannel.java
	transport/src/main/java/io/netty/channel/oio/AbstractOioChannel.java
	transport/src/main/java/io/netty/channel/oio/AbstractOioMessageChannel.java
	transport/src/main/java/io/netty/channel/oio/AbstractOioMessageServerChannel.java
	transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java
	transport/src/main/java/io/netty/channel/socket/nio/NioServerSocketChannel.java
	transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java
	transport/src/main/java/io/netty/channel/socket/oio/OioServerSocketChannel.java
	transport/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java
	transport/src/test/java/io/netty/channel/SingleThreadEventLoopTest.java
Make NioSocketChannelTest more bullet-proof

Motivation:
I had the NioSocketChannelTest.testFlushCloseReentrance() fail sometimes on one of my linux installation. This change let it pass all the time.

Modification:
Set the SO_SNDBUF to a small value to force split writes

Result:
Test is passing all the time where it was sometimes fail before.