Listener Middleware

Builds on #801 (57b722022807b9a5befaafcab2442ad3a03d455b) to allow injecting arbitrary code between the Listener match and execute steps. Like in Express, middleware can interrupt the response process, preventing the Listener callback from ever being executed. Middleware can perform operations both on the way towards the Listener callback (before callback execution) and on the way away from the Listener callback (after callback execution/middleware interrupt).

As a side effect, listeners are now executed asynchronously. Behavior around message.done should remain the same (process until message.done is true).

Example usage (imposes authorization policy on all scripts): https://github.com/michaelansel/hubot-rbac/blob/master/src/rbac.coffee
`result` in this case is actually the listener object that matched and set `message.done = true` (or `undefined` if none matched). As the variable is never used, I'll change it to `_`.

As an aside, there are some interesting race conditions around asynchronous processing and setting of `message.done`. Nothing new, just weak semantics around listener callback execution. Example: listener callback does some work, fires off an async process that eventually sets `message.done = true`. Previously, that was guaranteed to be completely useless (didn't yield to the event loop); with this change, something could happen. The best fix would probably be to make listener callback execution asynchronous as well, but I'd like to keep this change as simple as possible...