Add assume and expectThat utilities

assume marks the test as skipped. This is not useful currently, but
could be useful if it make the test runner not treat exceptions as
failures anymore.

expectThat does not throw an exception when it fails, instead it
collects failures and throws them in a teardown all together.

Add an `_isSkipped` field to `_TestContext` and remove
`_SkippedContext`. The field can be set late which allows us to bail out
of subsequent expectations on a given subject without throwing. This
avoids figuring out how to treat failure messages for an expectations
following another expectation that had failed. Current failure message
formatting relies on the fact that you only see clauses which were

Neither of these is very easy to test without sharing some testing
utilities from the test runner because it involves making expectations
about the state of the test runner. Another possibility is to run a
subprocess and make expectations about the reporter output.
6 files changed