Delay reporting test success / failure.

In recent versions of mocha it is possible to set or change a test
error from an `afterEach()` hook - this can be useful when you want to
fail a test for some reason after it has finished.

With the previous version of the code those errors were lost entirely
because the test result was reported before that point.  This change
delays reporting a test result until either the next test or suite
begins or a suite ends.  Now if you set an error using
`this.test.error()` in an `afterEach()` it will be available at the
point that the failure is reported.
Include a stack trace when tests fail.