Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
It would be nicer if we could use the `UUID` directly as a type parameter, especially since it is much more compact than a string or symbol, but that depends on JuliaLang/julia#6081 (which may not get addressed any time soon).