Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
Hmm, now that I look at this, it looks a little weird to me to use a random number for the `session` field.