Move AbstractBootstrap.ChannelFactory out of AbstractBootstrap and hide AbstractBootstrap from a user

- Fixes #998
- Also generified ChannelFactory