After this PR is merged, I am going to do some cleanup work on the `zmq.KernelManager`.  I am going to make it a `Configurable`.  Do you want to use that base class here?  Does this class have the same public API as `zmq.KernelManager`.  Would it make sense to share any of the implementation with a common base class?  Also, do the channel classes above have the same API?