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).
Can't the `serialization.create_glir_message(commands, 'base64')` set the output key `'array_serialization'` itself so that it doesn't need to be done on this line? Or is this command used other places, too, where it wouldn't make sense? This would reduce code redundancy because you wouldn't have to also have the key setting on line 317, either.