Initial support for annotating multiple frames

The host page annotator is split into a host and guest version. The
`Annotator.Guest` class implements most of the behavior from the
old `Annotator.Host`, but leaves out everything to do with the widget
hosting aspects (opening, closing and coordinating drag resize with
the sidebar frame).

The bridge is improved to support multiple connections and multiplex
RPC calls. Connections are established by probing other frames to
discovered other bridge annotators. A frame may act like a DHCP
server, responding to discovery probes and offering to connect.

The annotator service is refactored to behave more reasonably with
service and dynamic frame discovery. Rather than assuming that
document metadata is fetched from a single frame, entities from
all frames are registered when they connect. The Store plugin is
patched to load only links that have not previously been loaded
so that API calls can be made as additional entities are registered.

Most functionality, aside from highlight mode, is broken. This is a
result of the difficulty of dealing with the heatmap when it may be
hard or impossible to determine the real offsets of the annotated
frames relative to the offset of a global heatmap. The changes to
extract the heatmap were left out of this commit in order to keep
the size of an already large commit down.
Move the heatmap outside the sidebar

Inject the heatmap into the host frame using the default embed script.

It will be possible after this to make vanilla embed codes available
which can be used for headless operation or inserting the heatmap in
guest frames.

Fundamentally, the heatmap is altered to behave as though it's inside
the same frame as the annotations. That makes it easier to access
the highlights directly, rather than the pre-resolved jquery that
was being serialized across the bridge before.

Since it is now necessary for the reply counts to be known outside the
sidebar, the bridge is changed to support updating annotations and the
sidebar application is changed to bubble updates through ancestors.

Since iframes cannot have visible overflow the z-index constraints
required to have the heatmap still appear attached to the sidebar
dictated that the controlbar move outside as well.

Adds query parameters when embedding to create embed codes that have
no plugins loaded. This is useful for custom embeddings.

Lastly, I took this opportunity to improve the up/down buckets with the
help of the jquery scrollintoview plugin, which should ensure that
this function works even in situations with nested scrollable panes.

Also, closes #464.
Import quick fix for annotator

We really need to get off maintenance.
Do not hide sidebar when @noBack is set.

In always-on mode clicking highlight now opens the sidebar.
Fixes #669
Avoid impacting the dom text map with heatmap
Various small fixes to solidify multi-frame work
Move the full toolbar outside; restore drag

Several benefits:
- Custom open/close sidebar toggle is now possible for publishers
- The frame div holds the background image now, which means publishers
  can customize the background behind the annotation sidebar

Also, the heatmap is now the drag handle and it's finally possible to
open the sidebar via a drag action.

Closes #685
Make test less brittle to slow heatmap loading
Better font size resets for inject

Closes #749
Closes #752
Refactor toolbar for multi-frame
Temporarily disable heatmap base tag hacks
Prevent up/down bucket clicks from opening sidebar

Regression.
Restore heatmap click to close sidebar
Fire annotation(Editor|Viewer)Shown events
Make the toolbar a plugin
Remove redundant code in subclass

This code was moved from the host to the guest but I forgot to remove
it from the host.
Wire update notifications into the new toolbar

Closes #779
Merge pull request #778 from hypothesis/multi-frame-8

Support for annotating multiple frames