ForkJoinPool-based EventLoopGroup and Channel Deregistration

Hey,

this is a first version of Netty running on a ForkJoinPool and deregister (hopefully) working correctly. The main idea behind the changes in deregister is that deregister is always executed as a task and never invoked directly. We also do not allow any new task submissions after deregister was called, making the deregistration task the last task of a particular Channel in the task queue and we thus do not have to worry about moving tasks between EventLoops. We achieve this mainly by wrapping all calls to .eventLoop() and .executor(). There is some special treatment required for scheduled tasks, but this is best explained in the code.

Let me know what you guys think.

@normanmaurer @trustin
@normanmaurer @trustin The 10ms were chosen arbitrarily. Any ideas on how to determine a good value? Maybe measure some migration times in a benchmark?