Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
Oh, right. I put them here because IPython widgets require that the status message contain the message ID which caused the message to maintain per-widget message queues. I now pass message header in the the main call site, so removing these.