support binary buffers in comm messages

- add buffers arg to comm Python api
- support binary websocket messages when buffers are present
- reimplement utf8 in javascript, because javascript is the best

The binary message format used on websockets:

```python
[
  nbufs, # number of buffers
  offset0[, offset1[, offset2...]] # offset for each buffer (nbufs offsets),
  buf0 # the first buffer
  [buf1,] # etc.
]
```

The numbers (nbufs and offsets) are serialized as 32b network-order integers (`struct.pack('!i')`). I imagine uint_16 would probably be plenty big enough, and any kind of uint is probably appropriate.

[demo notebook](http://nbviewer.ipython.org/gist/minrk/e838bbcd9c6db3ed3f9b)

RFC @jsongrout
I googled both `unserialize` and `deserialize`, and it appears that there are a lot more people using the word `deserialize` than `unserialize`.  On top of that, it seems that PHP is the biggest proponent for `unserialize`, and it's probably not the worst general policy to choose the opposite of whatever PHP did.