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
I'm trying to reason through if we actually need to use the value of `result` at all. The only time this would be true would be if a listener did `msg.done()`, to abort any following listeners. If none of the listeners marked response as done, then `result` would be `false`. But, we really only care about if any listeners fired and have to track that separately from detecting the listener finishing the message.

I'm wondering if we can just make it a throw away variable name, like `_`, and comment to that effect.