Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
Right, we had this discussion above.

To be honest, now that I see what it looks like, it feels like just making `on_msg::Function` be a field of `Comm` would be cleaner.