Support for annotating multiple frames

This pull request makes all necessary changes to allow annotating multiple frames, as well as some other nice things.

- The toolbar (formerly "controlbar") is now a plugin (but only works with h, not annotator upstream).
- The heatmap is now outside the iframe
  - No more negative margins on the collapsed sidebar
  - No more cross-frame RPC on scroll and resize
  - Reply counts are serialized by the bridge for the host frames
  - The heatmap is now a drag handle (much better than before) for resizing the sidebar
- The whole annotator frame on the host page now carries the background texture
  - It's possible to have a transparent background, for seamless integration.
- The sidebar annotator service can have multiple providers
  - The bridge plugin can operate in two modes -- client or gateway
    - Clients and gateways discover one another and the gateway offers to connect. Like DHCP.
  - The bridge plugin is augmented with an `onConnect` callback so further channels can be built which go outside the scope of the basic bridge functions.
  - Many notifications are now multiplexed to all connected frames
  - The embed code can be loaded with two new query parameters, `light` and `role`
    - The `light=true` parameter will load the annotator without our UI plugins (no heatmap, no toolbar)
    - The `role=guest` parameter will load the annotator without creating an iframe sidebar
      - The host role creates a sidebar and manages drag resize / open / close
      - The guest role participates with highlighting and annotation, but connects to an existing sidebar