Stop test after first assertion failure, and handle exceptions thrown from callbacks

This pull request contains two suggested fixes:

1. Currently when an exception is thrown from an asynchronous callback the process crashes and subsequent tests don't run. Instead we should catch the exception and fail the test gracefully with test.done(exception).

2. Currently when any assertion fails the test continues and all other assertions are called. This is not a common behavior. The test should fail and stop after the first assertion failed, and move on to the next test.