Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
I'd like to make sure that we parse any UUID into a canonical form before comparing it to another UUID, so the introduction of `-` shouldn't matter.