Issue #7563 - Allow mocha timeout to cancel flow.

This pull request is an attempt to address the issues described in https://code.google.com/p/selenium/issues/detail?id=7563

Actually, we shouldn't need to cancel `done.promise` as it's just an adapter between `testFn` and `flow.execute`. By resetting the flow, any remaining tasks will be silently discarded, but it's possible running code could still schedule additional tasks (via callbacks) that impact the next test.  I suppose this is no different than a normal timeout though:

    describe('async test', function() {
      beforeEach(function() {
        q = [];
      });

      it('times out', function(done) {
        this.timeout(100);
        setTimeout(function() {
          q.push('a');
        }, 150);
      });

      it('passes (maybe?)', function(done) {
        setTimeout(function() {
          q.push('b');
          require('assert').equal('b', q.join(''));
          done();
        }, 50);
      });
    });