support 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
s/unserialize/deserialize
use utf8.js

move message serialization to kernel.serialize module
support binary message from javascript
use TextEncoding for string<->ArrayBuffer

requires text-encoding js polyfill, for now
install text-encoding polyfill
test websocket-friendly binary message roundtrip

Python-side
include buffers when resending message

in zmq.session
test binary websocket messages

only runs on slimerjs for now
unsigned ints for offsets

because signed ints for sizes is icky
move binary msg test to services/serialize
update components to master

text-encoding has been merged
Add pygments_lexer key to kernelspec
Use kernelspec metadata for higlighting in nbconvert

Closes gh-6619
Deprecate NbConvertBase.default_language config option
Wording change as suggested by @minrk
Fix attribute name
Fallback to plain text if higlighting lexer not found.
Fix Qt loader commit_api() for 'pyqtv1' or 'pyqtdefault'

Our Qt loaders have three options representing PyQt - pyqt (with v2
strings API), pyqtv1 (v1 ditto), and pyqtdefault, which is v2 on Python
3 only. When loading pyqtv1 or pyqtdefault, the code to deny imports of
other bindings would assume that api != pyqt meant we were using pyqt5,
and forbid future imports of PyQt4.

This changes the logic around so PyQt4 is the else: case, catching all
three possible names for it. PyQt5 and PySide have, so far, only one
name each.
Fix QtConsole tooltip formatting remove string mangling, and turn on QT wordWrap