Added reject() and Rejection class as well as tests.

The Rejection class is a proxy class for the Assertion class which
wraps it and then completes any final assertion methods inside a
closure.  The closure is then asserted to throw an exception.

As part of this change, the exception handling has been revamped
and a number of new methods were added.

The documentation will reflect this shortly.