Make comm manager (mostly) independent of InteractiveShell...
Make comm manager (mostly) independent of InteractiveShell
This makes it possible to use comms from wrapper kernels, without
instantiating the full IPython shell machinery.
The one remaining place where we need a reference to shell is to fire
pre_execute and post_execute hooks (which are needed to get mpl figures
right). This is a pure IPythonism, that it should be safe to ignore if
shell is not set.