Widget Messaging Protocol (IPEP 21)

This implements [IPEP 21: Widget Messaging](https://github.com/ipython/ipython/wiki/IPEP-21:-Widget-Messages).
If `id` were a field, I'd need a `Dict{Comm, Function}` to implement message event handing...

Example of how I'm using this:
https://github.com/shashi/IJuliaWidgets.jl/blob/master/src/IJuliaWidgets.jl#L148