Async: Implement new `assert.async` mechanism

Fixes #534.

**Typical Usage Example:**

```js
QUnit.test( "x", function( assert ) {
  assert.expect( 1 );
  var done = assert.async();
  setTimeout(function() {
    assert.ok( true );
    done();
  }, 250);
});
```

This PR should now be merged before #634 (which I will then rebase).
The text was pre-existing. The "any current callbacks" part basically means to allow the current event loop to finish first.  Otherwise, the `process` call will happen before the actual test body's callback may finish if `QUnit.start()`/`done()` wasn't the **last** line in their code.