Add support for promise-returning tests

This patch makes it possible for ``it`` blocks to return promises for their results, obviating the need for ``waitsFor`` blocks.  Particularly, this supports jQuery, Dojo, and Q style promises.

```javascript
var Q = require("q");
describe("Q.delay", function () {
    it("can time out", function () {
        return Q.delay(1000).timeout(500)
        .then(function (value) { // fulfillment callback
            expect(true).toBe(false); // should not get here
        }, function (error) {
            expect(error).toBe("Timed out");
        });
    });
});
```