There is a certain class of test failures that arise as a result of errors that occur during cleanup. For the most part, these don't indicate test failures and so it's useful to distinguish them from test failures. This patch creates a new category of error, called a CleanupError, that is handled (and reported) independently of whether or not any individual tests failed.
This is especially important when there is a directory that contains multiple test suites, because previously a cleanup error on the first suite would automatically cause subsequent suites in the same directory to not run, as a result of exception propagation.