Improve async test reliability

Exceptions thrown in promise callbacks were being missed. We now 'fail'
the test after the initial promise has resolved, if the subsecquent
promise is rejceted.

For errorbacks, we need to wrap the function in a try-catch in order
handle exceptions as the promise chain would already be rejected.