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.
Make comm_manager a property of kernel, not shell
Safeguard against comm instantiation with both session and kernel (corner case)
remove on_first_message authentication

in ZMQStreams. No need for weird, special first message.

- use regular cookie auth
- use url param for session id
Merge pull request #6629 from minrk/wscookie

remove on_first_message authentication
Merge pull request #6540 from takluyver/comms-mgr-needs-no-shell

Make comm manager (mostly) independent of InteractiveShell