Extract out generic report class

Now we pass a list of backends and implementation classes know how to
run the test. Each implementation will store results into a separate
database.
Restore json output

The output now includes all backends.
Output JavaScript with commit description

JSON might make sense later when our frontend is smarter.
Add a very early frontend

Many things are hard-coded, but it can process the script output.
Show the commit message in the frontend
Report results in oldest to newest order
Rename each backends results to samples

This will allow easier differentiation between the report results and
the commits list of samples for each backend.
Skip building and checking out when possible

When we have all the data we need for a commit, do not checkout or build
that commit. This makes moving through commits we've already see a lot
faster.
Add support for backend variants

This includes the MSAA compositor and a type of backend that doesn't use
the image caching option for cairo_perf_trace.
Clean up the HTML and split out CSS/JavaScript
Add each graph to the DOM dynamically
Add a chart title
Allow toggling series visibility in the graph