Added conditional waiting support for asyncronous tests

Example usage:

```javascript
AsyncTestCase.subclass('DragonTest', {
    testSlaysDragon: function() {
        var dragonAlive = true;
        var siegfried = function() { dragonAlive = false; };
        this.delay(siegfried, Math.random() * 42);
        this.waitFor(
            function() { return !dragonAlive; }, // guard funtion
            10,                                  // interval
            function() { this.done(); });        // callback
    }
});
```