Handlers are processed sequentially (no concurrency, even with the same priority).
Handlers return a deferred. We add a callback to run the next handler.
.dispatch() returns a deferred, triggered by the final handler completing.
Formalize 'requires' and 'contains' into one structure, with optional defaults.
Rename 'consider' (and sometimes 'predicate') to 'filter' or 'prefilter' and try to improve/document its interface.
The handler should decide whether to unregister itself, not the filter. Filter just returns boolean True/False for whether the handler should be called.
Move action chain into a class with a less functional-style approach. The code is hard to follow and doesn't allow for checking the time til the impending restart, for example.
we should consider not reversing the priorities as bukkit does (highest is called last). high-priority event handlers should have a greater chance of seeing an event before it's eaten than low-priority ones.
Good things: