Optimize updating of the graphs

* Do the updates in a requestAnimationFrame callback rather than synchronously
  in response to mouse moves and scrolls - this prevents us from spending
  all our time updating and none updating.

* Draw the points with a single SVG <path> element so that we don't have to
  change huge number of attributes or create DOM elements when we scroll
  other elements into view.

* Cache SVG elements of different types and just update-them and move them
  about rather than adding and removing them.

* Don't include points outside of the visible range.
Don't draw a line between ungrouped points

For the bigger timescale graphs, the line connecting the point helps
the eye follow trends and implies that the points shown are summarizations
of a continuous process, but at the day level where no grouping is done,
they are just confusing and obscure the fact that changes are usually
noise.
Support double-clicking to zoom in

Double clicking zooms in around the double click point.
Add +/- keyboard shortcuts for zooming

Once you've zoomed in with double-clicking, it's nice to have some way
to zoom out without having to navigate to the links.