Deregistration of a Channel from an EventLoop

Motivation:

After a channel is created it's usually assigned to an
eventloop. During the lifetime of a channel the
eventloop is then responsible for processing all i/o
and compute tasks of this channel.

For various reasons (e.g. load balancing) a user might
require the ability for a channel to be assigned to
several eventloops during its lifetime.

Modifications:

Introduce under the hood changes that ensure that Netty's
thread model is obeyed during and after the deregistration
of a channel.

Ensure that tasks (one time and periodic) are executed by
the right eventloop at all times.

Result:

A channel can be deregistered from one and re-registered with
another eventloop.