Do we actually need to call the event handlers in ascending order?  If not then we could simply do:

```
var eventHandlers = events[type || event.type] || [];
for(var i=eventHandlers.length-1; i>=0; i=i-1) {
  eventHandlers[i].call(element, event);
}
```
Then if an even removes itself from the list, it won't affect the iteration...