Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
It doesn't look fixed to me.   `comm_open` is calling `Comm(target, ...)` where `target` is a string, but 60b15c03dc5ec99df1a7f1f5fe585a7c885e1f88 changes the `Comm` constructor to explicitly require `Comm(target::Symbol, ...)`.

Please actually test the `comm_open` function...