Limit latex equations to page width.
Fixed latex template to support multicol w/ adjustbox.
update hmac signature comparison

see https://docs.python.org/2/library/hmac.html#hmac.compare_digest
support Python older than 2.7.7
minor cleanup
warn users running older versions of Python
Update widget serializer/unserializer to allow custom serialization on a trait-by-trait basis.

Serializers/unserializers are given as the trait metadata keys `to_json` and `from_json`.
Give subclasses of the Instance traitlet the option of overriding the klass variable to have a default klass.

This makes it easy to construct traitlets for specific object types and default metadata.  For example, we can have a traitlet for numpy arrays that gives default values for `to_json` and `from_json`:

```python
def np_to_list(a):
    if a is not None:
        return a.tolist()
def np_from_list(a):
    if a is not None:
        return np.array(a)

class NDArray(Instance):
    klass = np.ndarray
    metadata = {'to_json': np_to_list,
                'from_json': np_from_list}
```

Then the NDArray traitlet will by default have the klass and some custom metadata.
Prepend a sentinel value to model ids to distinguish them from normal UUIDs (from Sylvain Corlay).
Change serialization terminology to serialize/deserialize
once-displayed
unnecessary context variable specify
incorrect comment
correction in widget.js
Simplify the code for picking json serialization functions to expose the logic better
Add a requirejs shim for highlight.js

Before this, highlighting code in markdown cells was broken since hljs wasn't available.

A better solution might be to build the highlight.js amd module (i.e., build the highlight.js module with `--target=amd`) so that we don't need the shim.
restore websocket_url configurable

allows ws to be handled via separate proxies,
as appears to be the case on OpenShift and some other hosting services.
pass ws_url to kernel constructor

via session constructor via notebook constructor…
return global events from require(['base/js/events']).

In master, it is impossible to load code on IPython events without setting timeouts.
don’t use events !== undefined to signal page ready

it will always be defined