Adds `it.async` DSL for testing async operations.

Async tests should return a Promise object. This code wraps the `it`
function body into a wrapper that calls `QUnit.start` and `QUnit.stop`
as required when the promise resolves or rejects.

The signature is, `it.async(description, body[, timeout])`

The default timeout is 1 second. If you pass a third argument, it
becomes the time (in ms) to wait until the promise resolves.

Example:

```javascript
it.async('with model that returns a promise', function() {
  var promise = model.find('foo').then(function(result) {
    expect(result).to.equal('foo');
  });

  return promise;
});
```
My tests show that it does resume the rest of the tests. This is the [line in question](https://github.com/jquery/qunit/blob/master/src/test.js#L131). It appears to call `QUnit.start` when blocking. And `QUnit.stop` sets blocking to true.