Allow async tests to optionally pass a verify fn to done() to improve error reporting (newer version)

#### This is a reimplementation of https://github.com/visionmedia/mocha/pull/278

Currently (as of mocha v1.12.0), running in a headless browser like phantomjs, a test like this:
```
test('foo', function (done) {
  myAsyncFn(function (err, result) {
    expect('mocha is good').to.equal('mocha is awesome');
    done();
  });
});
```

Will yield this not so awesome output:

> Uncaught Error: expected 'mocha is good' to equal 'mocha is awesome' (http://localhost:###/**/chai.js:509)

This is a generic failure, where the stack trace and the `actual` and `expected` values are lost. No test reporter will be able to display something more useful.

---

With this pull request, you can slightly change the test to this:
```
test('foo', function (done) {
  myAsyncFn(function (err, result) {
    done(function () {
      expect('mocha is good').to.equal('mocha is awesome');
    });
  });
});
```

And get an awesome failure report. The default mocha reporter will show a string diff, like this:

> *actual* **expected**
> "mocha is **awesome** *good*"

---

Alternatively, you can wrap your callback function, so that your test code becomes much more cleaner. Like this:

```
test('foo', function (done, dotry) {
  myAsyncFn(dotry(function (err, result) {
    expect('mocha is good').to.equal('mocha is awesome');
    done();
  });
});
```

The output will be the same as in the other approach. As you can imagine, the arguments (`err` and `result`) are propagated to your wrapped function.

Beware that you still have to call `done()` (or `done(err)` or `done(fn)`) explicitly at some point. If you have several async callbacks, call `done` only on the last one, just as you do today.