Emit output for all tests, even those that didn't get to run

Previously if a test or test suite crashed then none of the tests after
that one get to run. This means that the events never get outputted to
the reporters, and so they don't even know the tests exist. This causes
confusing results where a crash causes the existence of tests to be
hidden.

This commit fixes the situation with a bit of a architectual change.
OCUnitTestRunner becomes a reporter itself. As tests are executed it
tracks the state via the OCEventState subclasses. If at any point the
execution of a test suite fails we can use these state classes to emit
test events for the remaining tests and to handle any remaining events
that need to be emitted.