better error reporting on test failure

Try to recover from errors and collect them all and present them as an
AssertionError if necessary (i.e. fails).