extra/runner/run: Do Blackmagic failure detection before user recovery script

The user `recover` script might choose to power-cycle the
system-under-test, which isn't necessary if the failure was the fault
of the Blackmagic video-capture card.

`check_capture_hardware` now writes to `failure-reason` as well as
`failure-reason.manual` (even though `failure-reason` will be
overwritten the next time the user manually runs `report`) so that the
user `recover` script sees a failure reason of "Blackmagic card in use"
instead of "NoVideo".
extra/runner/server: Allow user to remove test results from report

This doesn't delete results altogether, it just hides them by renaming
the testrun folder with a leading ".".

We add the "Hide this result" link with javascript instead of adding it
to `templates/testrun.html`, so that the link only appears if a server
capable of handling it is running (i.e. the `server` script, which also
serves `edit-testrun.js`).

You'll still need to manually press "refresh" in the browser to see the
summary report without the deleted testrun. This is because the test-run
details html is in a separate iframe, and I don't know how javascript in
the iframe can access the parent document.

Note that we now need to call `report` so that it regenerates *only* the
summary html; call `report path/to/index.html`. I've also updated
`report.py` to provide a nicer error message if `report` is called in
this way with a path that doesn't contain testruns.

I'm testing this in the existing unit test rather than creating a
separate test, because the test setup is relatively complicated and it
takes a few secondns to run.
extra/runner/server: Cleanup: `update_file` uses `d` instead of `testrun`

For consistency with the rest of this function, and to encapsulate into
the function `testrun_directory` the knowledge that the `testrun` path
in the url is relative to `app.instance_path`.
extra/runner/report: Debug for "skipping in-progress test" includes directory name

Also use `echo "$rundir: ...` explicitly instead of the function `debug`
because to call `debug` you had to know whether the `rundir` variable
was set to the right value. There is already a lot of global state and
tight coupling in these scripts, but every little improvement helps. :-)
extra/runner: Upgrate to x-editable.js 1.4.6

This fixes newline handling in editable textareas. See
https://github.com/vitalets/x-editable/commit/081135a2