extra/vm/setup.sh: Install `lsof`

Used by `extra/runner/run` since commit 313cf4fa. `lsof` is already
installed as a dependency of `ubuntu-standard`, but it is nice to list
it explicitly so that this list of packages can serve as documentation
to people who want to build their own stb-tester packages for Ubuntu
or other operating systems.

`lsof` isn't in `extra/stb-tester.spec` because that package doesn't
install the runner; for now the runner is only available from the source
repository.
extra/vm/setup.sh: Document why each package is needed

This information was available in the commit message that introduced
each line, but it's probably unreasonable to expect people to look up
that information with `git annotate`.
extra/runner/README.rst: Formatting

Code blocks must be preceded by `::`; see
http://docutils.sourceforge.net/docs/user/rst/quickstart.html#preformatting-code-samples
test_runner_recovery_exit_status: Test that `run` stops even with `-kk`

...if the user `recover` script returns failure.
extra/runner/run: Pass extra command-line arguments to test script

Commit bf393c1d taught `stbt run` to pass extra command-line arguments
to the test script. This current commit does the same for
`extra/runner/run`, the script for running multiple test scripts in
bulk. This allows you to run the same test script with different
arguments when you need to run multiple permutations of a test case.

To use this, place "--" on the command line between test scripts to run:

    runner/run test1.py arg1 arg2 -- test2.py ...

Without the "--", each argument is treated as a separate test, the same
way it worked before this commit. This makes it convenient to use bash's
brace expansion when you don't need to pass arguments to any of the test
scripts:

    runner/run very/long/path/to/{test1.py,test2.py,test3.py}

If you want to pass arguments to a single test script, place a "--" at
the end:

    runner/run test.py arg1 arg2 --

IMPLEMENTATION NOTES
--------------------

The implementation tries hard to preserve whitespace in arguments:

`read -a test` reads from standard input into the array variable `test`.

`IFS=$'\t' read ...` makes `read` split elements on tabs, not on any
whitespace (`$'\t'` is a string containing a single tab character).
Unfortunately you can't use `IFS=$'\0'` (split on the null character)
because bash internally uses C-style null-terminated strings. Tab is
a character that hopefully won't appear in genuine user arguments.

`"${test[@]}"` (and `"$@"` for the parameters to a function)
individually quotes each element in the array.

See:

http://www.gnu.org/software/bash/manual/html_node/Arrays.html
http://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-read
http://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
extra/runner/run: Fix infinite loop

The previous commit (233889de) ran the `while` loop from a sub-process,
because of the `parse_test_args | while` pipeline. Inside this
sub-process, any `break` statement couldn't affect the parent process,
so it couldn't break out of the outermost `while true` loop. Similarly,
any `exit` called from `run` would stop the current iteration, but it
wouldn't exit the parent process, so another iteration would run.

By moving the `parse_test_args` call outside of a pipeline, the `while
read ...` loop is run in the main process. `while` and `read` are both
bash builtins.
extra/runner/run: Cleanup: Rename variable from `_test` to `testpath`

For clarity. We already had `test` and `_test`.
extra/runner/report.py: HTML-escape user input

Escape input entered by the user via the web interface to avoid XSS
attacks in case the server is run on a public or untrusted network.

User-entered data is only stored in files with the ".manual" extension.
You can still have your `classify` script enter html links in
`failure-reason` etc; changing those scripts requires access to the
server anyway, so they are considered trusted.
stbt.press: Show key name in output video

This makes it a lot easier to understand what is happening when watching
a test run, and more importantly, when triaging the recorded video from
a failed test.

Note that `Display.push_buffer` has to iterate over a *copy* of the
`video_debug` list because it is removing elements from the (original)
list as it iterates over it^H^H the copy.

Note that we don't have to worry about the text overflowing the video
frame, either horizontally (for long text) or vertically (for many quick
`press`es). The OpenCV `putText` function just ignores areas outside of
the target image.
Bump stb-tester version to 0.15