extra/runner/run: Redirect the standard input of user hooks

`run` script invokes user hooks from its `run` function that is called
from inside a `read` block; this way the user scripts share the
input of the `read` command. This can lead to unexpected behaviour
if any of the user scripts include a command that reads from the
standard input.

Redirecting the standard input of user hooks to /dev/null isolates
these scripts from `run` sufficiently.
stbt templatematch: Rewritten (for speed) to use stbt python API

...instead of calling `stbt run`. This runs in 1/13th of the time of the
old version. This is important if you use `stbt templatematch` a lot in
the self-tests for your body of stbt scripts.

While I'm here I added an extra self-test for the argument checking.
extra/runner: Summary report: Selecting a row doesn't alter browser history

Since you'd click on many rows (or use the up/down arrows), you'd end up
with many entries in the browser history, and you'd have to click "back"
hundreds of times to get to the page you were on before this summary
report.

See http://stackoverflow.com/a/8681618/606705
extra/runner: Summary report: Set iframe height on page load

This line was removed in the previous commit (baeb752c) and added to the
click/keydown handler. But we need to set the iframe's height on page
load too, for Chrome or Safari users who navigate away from the summary
report (e.g. by clicking on one of the log files) and then press the
"back" button. Otherwise after pressing "back" the iframe is at its
default height (only enough to show a few lines of text).

Firefox doesn't need this fix because it handles the "back" button
better (the currently selected row is still blue, the iframe is just as
you had left it).
extra/runner/run: Nicer error message if `ts` isn't installed

Fixes #58.
lirc integration tests for `stbt.press` with a fake lircd

lircd's request & response messages are documented here:
http://www.lirc.org/html/technical.html#applications

Some of these tests currently fail, because they expect the `stbt.press`
behaviour implemented in https://github.com/drothlis/stb-tester/pull/61
stbt.py: Check reply from lircd after sending a key press

After sending a key press to a LIRC socket, wait for the reply packet
and check whether the command was executed succesfully. Raise an
exception unless lircd reports success.

The reason for increasing the complexity of LIRC remote implementations is
that currently stbt sends a key press to lircd and doesn't care if the
command was executed successfully. This can lead to test failures due to a
key press not sent. The root cause of these kind of failures is almost
impossible to find, because it's not possible to find out if the set-top-box
ignored the received IR signal, or the IR emitter failed to send it.

Previously, sending a message to lircd was a blocking operation with
indefinite timeout. Now it has a hardcoded 3-second timeout, which
should be more than enough time given that lircd is running locally.

Reading the reply from lircd also has a hardcoded 3-second timeout,
which experimentation shows is sufficient time for lircd to emit the
infrared signal and to send the response message.

For the details of lircd messages see:
http://www.lirc.org/html/technical.html#applications
Merge branch 'lirc-error-handling'

`stbt.press` waits for the response from lircd and raises an exception
if the response times out or indicates an error. Note that c84ac372
implemented similar error handling for the irNetBox.

* 'lirc-error-handling'
  stbt.py: Check reply from lircd after sending a key press
  lirc integration tests for `stbt.press` with a fake lircd
stbt control: Output message: "Control" instead of "Listener"

This isn't "listening" using, for example, LIRC; it's using LIRC to
*send* the signals.
extra/runner: Send error messages from `sensors` to sensors.log

When run on a VM, `run` was printing the following error message to the
console after every test run:

    No sensors found!
    Make sure you loaded all the kernel drivers you need.
    Try sensors-detect to find out which these are.
extra/runner summary report: Fix jerky width change of details pane

Bootstrap's "affix" jQuery plugin started having an annoying behaviour
after baeb752c, where the width of the "details" iframe is different
when the window is at the top-most position, than when you scroll down
slightly.

"affix" is designed for fancy websites where an element moves normally
with the document as you scroll, but then "sticks" at the top once
you've scrolled enough. This is overkill for our needs, and a simple
"position: fixed" does the trick, without the flicker.
extra/runner summary report: Update "details" pane's height on window resize

Otherwise if you shrank the window, you wouldn't be able to scroll the
details pane; and if you grew the window, the details pane wouldn't take
up the full available height (until you selected a new row from the
table).

Also, the height calculation takes into account the 40-pixel-high black
title bar at the top of the window.
make doc: Don't mention parent class "object" in API documentation

Otherwise the API documentation (which is generated programmatically
into README.rst) would say:

    class MatchParameters(__builtin__.object)

instead of:

    class MatchParameters

ever since 65a38380. (I hadn't re-run `make doc` since 65a38380, which
is why the above change hadn't made its way into README.rst).
README.rst: Minor formatting change to reflect 65a38380

This commit is the result of running `make doc`, which updates the API
documentation in README.rst from the docstrings in stbt.py. I had
forgotten to run `make doc` when I made the changes in 65a38380.
Bump stb-tester version to 0.16

Note that the version number in the RPM spec file was already bumped in
2dfc88c2.
extra/runner/run: [bug] do classification before `check_capture_hardware`

...because `check_capture_hardware` greps the 'faiure-reason' file which
is created by running classify. This caused `check_capture_hardware` to
fail if using a device that uses the `v4l2src` Gstreamer element.