Add support for Zones

I think the semantics are different. Not in all situations I want to reject the promise automatically. In addition, the constructor approach makes the code more nested.

```
       var a = PromiseWrapper.completer();
        var b = PromiseWrapper.completer();

        zone.run(() => {
          log.add('run start');
          a.promise.then((_) => log.add('a then'));
          b.promise.then((_) => log.add('b then'));
        });

        a.complete("a");
        b.complete("b");

        PromiseWrapper.all([a.promise, b.promise]).then((_) => {
          expect(log.result()).toEqual('onTurnStart; run start; onTurnDone; onTurnStart; a then; onTurnDone; onTurnStart; b then; onTurnDone');
          done();
        });
```

becomes

```
        var a = PromiseWrapper.create(function(resolveA, reject) {
	 var b = PromiseWrapper.create(function(resolveB, reject) {
       zone.run(() => {
          log.add('run start');
          a.then((_) => log.add('a then'));
          b.then((_) => log.add('b then'));
        });

        resolveA("a");
		resolveB("b");


        PromiseWrapper.all([a, b]).then((_) => {
          expect(log.result()).toEqual('onTurnStart; run start; onTurnDone; onTurnStart; a then; onTurnDone; onTurnStart; b then; onTurnDone');
          done();
        });
	 })
 })
```