extra/runner: Add plot of testrun durations to HTML report

Adds to the runner `index.html` template a chart of test run durations
rendered with the jqplot library to aid in identification of outliers.

The chart shows the duration (y-axis) in seconds for each test run
(x-axis). The left hand size (x=0) is the earliest test in the testruns
table.

Summary of features:
- Clicking on point navigates to the corresponding row in the testruns
  table and opens the test result in the right-hand panel.
- Hovering over a point in the chart will show the timestamp of the
  corresponding test run.
- The report is still self-contained, as the data for the plot
  is pulled directly from the `#testruns` table.
- The chart is resized to fill the available space whenever the window
  is resized.

As jqplot expects an array of `(x,y1,y2,...)` points for each series,
this `plotSeries` is populated when the page is ready. The tooltip text
lookup is implemented with a custom `tooltipContentEditor` that uses a
hidden y-axis to store the timestamp.

The js and css files for jqplot are hosted by the `jsdelivr.net` CDN.
extra/runner: Color points in the HTML report plot by status

This updates the runner's `index.html` report template to color the
points based on the css class of the row in the `#testruns` table. This
is done by having a different jqplot series for each css class and
then specifying a color for each one.

The css class of each row is set by `runner/report.css_class()` and can
be one of three values:
- `success`
- `warning`
- `error`

The colors of the points don't match up with those used in the testruns
table. This is because the latter colors are too light and the resulting
plot seems to be difficult to read.
extra/runner summary report: Update chart according to user filter

The "filter" text input allows the user to hide rows from the table;
this commit makes the plot only show the visible rows. This is the same
behaviour as the passed/failed/error totals displayed at the top.

I also moved the plot below the filter input, to imply that the plot
is controlled by the filter.
extra/runner summary report: Cleanup: Use "plot" for div ID, not "plotdiv"

This is for consistency with other IDs like "totals" and "details".
extra/runner summary report chart: Fix null dereference on selected row

`classname` returns a space-separated list of classes, so a selected row's
class is "success info" instead of just "success". This was causing an error
because `plotSeries[seriesIndex]` was undefined.
extra/runner summary report chart: Include test name in data-point tooltip
extra/runner summary report chart: Cleanup: Remove some unnecessary code
extra/runner summary report chart: Tooltip less transparent

and thus more readable.
extra/runner summary report chart: X axis is timestamp

So that you can see if no tests were run for a while, or patterns that
repeat every 24 hours, etc.
Merge branch 'runner-plot'

* runner-plot:
  extra/runner summary report chart: X axis is timestamp
  extra/runner summary report chart: Tooltip less transparent
  extra/runner summary report chart: Cleanup: Remove some unnecessary code
  extra/runner summary report chart: Include test name in data-point tooltip
  extra/runner summary report chart: Fix null dereference on selected row
  extra/runner summary report: Cleanup: Use "plot" for div ID, not "plotdiv"
  extra/runner summary report: Update chart according to user filter
  extra/runner: Color points in the HTML report plot by status
  extra/runner: Add plot of testrun durations to HTML report