Make shouldFail take an error predicate rather than a class

This will make it possible to do more detailed checks
Add support for cancellation to the suite runner
Add support for cancellation by SIGINT to test.js