Add adapter for msg spec versions

in IPython.kernel.adapter

Based on PR #4536

Basic changes:

- Add IPython.kernel.adapter with translation code. Mainly an `adapt(msg)` function.
- Adapt messages to/from the current version in the Session object.
- Frontends request kernel_info for the protocol version, which selects the version to adapt to, if any.

With this PR, at least the Julia and R kernels work in all three zmq-based frontends, without updating to the v5 msg spec.