Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
Ah, I wasn't saying I don't want hyphens :P Just need consistency in whatever convention each UUID uses. The problem is really that IPython's frontend compares UUIDs as strings. As long as a given UUID maintains its format throughout, that's fine. I was pointing out the trouble with parsing IPython's UUID string as UUID type and then converting it back to string introducing '-' to be sent in messages - this will cause confusion at the frontend.