Low-cost Zone.assertInZone() alternative: Zone.assertInTurn

When dart2js-compiled, Zone.assertInZone() carries a high CPU cost, primarily due to the cost of capturing the stack trace via a try-catch, pushing an async throw and verifying whether it executed in the zone. This patch adds a less costly synchronous assertInTurn() method which asserts that the call site is executing from within the zone's run/onRunAsync block. 

assertInTurn() does not guarantee that the code is running in the zone, since chained Futures may be evaluated synchronously from the zone's onRunAsync if the first future is in the zone, even though further .then() closures may have been captured outside the zone.