stbt.precondition: Context manager that replaces UITestFailures with UITestErrors

See the docstring of stbt.precondition for details. This approach has
proved very useful when running a single test script hundreds or
thousands of times to reproduce a particular intermittent defect. It
allows `stbt batch run` to automatically colour uninteresting† defects
in yellow (instead of red) so that we can focus our manual investigation
on the interesting failures.

† Uninteresting for the purposes of the current investigation into a
  particular defect.
make doc: Fix stbt.precondition documentation

stbt.precondition's `@contextmanager` decorator screws up the function
signature seen by pydoc, so use some sed to put it back to normal.
stbt.precondition: Document style of `message` parameter

`precondition`'s `message` parameter should describe the precondition,
not the error when the precondition isn't met.

I also tweaked the `PreconditionError` exception's message to make this
obvious in the test-run's output logs.
Rename stbt.precondition to stbt.as_precondition

Because the following code:

    with precondition("Tuned to channel 80"):
        some_code()

...could be interpreted to mean: run `some_code()` only if the
precondition holds, or only after establishing the precondition.

What it really means is: Run `some_code()` but if it fails treat it as a
precondition error, not a test failure. This is somewhat clearer with
the new naming:

    with as_precondition("Tuned to channel 80"):
        some_code()

Note that this change doesn't break compatibility with user scripts,
because `precondition` hasn't been in any stb-tester release yet.