If onError is non-null the zone is considered an error zone. All uncaught
errors, synchronous or asynchronous, in the zone are caught and handled
by the callback.

Errors may never cross error-zone boundaries. This is intuitive for leaving
a zone, but it also applies for errors that would enter an error-zone.
Errors that try to cross error-zone boundaries are considered uncaught.