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).
hmm, what about:

* `util/ipython/serialization.py`
* `app/backends/_ipython/serialization.py`
* `app/backends/_ipynb_util.py`
* `app/backends/_ipynb_serialization.py`