fix: prevent calling addEventListener on non-functions

This was throwing exceptions in firefox for the following case:
```javascript
elt.onclick = null;
```
feat: add onZoneCreated hook
fix: throw if a zone does not define an onError hook
feat: add decorator syntax
feat: refactor and test counting zone
fix: improve patching browsers with EventTarget
feat: support Promise