Add support for Zones

The usage will be as follows:

```
zone.initCallbacks({
  onScheduleMicrotask: angularAsynQueue.schedule
});
```

When running in JS, it is a noop. In Dart it will mean that if anyone is calling `scheduleMicrotask`, it will actually call to `angularAsynQueue.schedule`. So Angular will be in control of running all async functions.

Since this code 

```
zone.initCallbacks({
  onScheduleMicrotask: angularAsynQueue.schedule
});
```

is going to be be shared, we cannot have two different interfaces of VmTurnZone: one of js and one for dart.