Async: Implement new `assert.async` mechanism

Fixes #534.

**Typical Usage Example:**

```js
QUnit.test( "x", function( assert ) {
  assert.expect( 1 );
  var done = assert.sync();
  setTimeout(function() {
    assert.ok( true );
    done();
  }, 250);
});
```

This PR should now be merged before #634 (which I will then rebase).
does it work with before/afterEach hooks too? Like: `this.done = assert.async();` on beforeEach and `this.done()` on afterEach.

It would be good to add this test