Support binary WebSocket in the WebGL backend

The goal is to transfer NumPy arrays more efficiently from Python to the browser (only `DATA` GLIR commands). This is only possible in IPython >= 3.0dev ([link to the IPython PR](https://github.com/ipython/ipython/pull/6110)).

This PR should be ready for review/merge. Binary buffers are disabled for now; let's wait for the IPython 3.0 release to activate them by default (with base64 fallback if IPython < 3.0). This PR mainly implements a refactoring of the serialization logic for the GLIR commands, separating the buffers in an external object (necessary when using binary buffers).

* [x] Refactor serialization logic in a new module in `util`.
* [x] Use Comm send method to send binary buffers.
* [x] Test in IPython 3.0dev.
* Implement binary WebSocket by default unless IPython < 3.0, in which case fallback to base64 (to do in a later PR).
* There is a bug when binary WebSocket is activated and timer autostart is on (to do in a later PR).
Yes, this is temporary. When IPython 3.0 is released, I'll refactor that properly to use either base64 or binary according to whether IPython 3.0 is available or not.