Refactor before, after, and around hooks.

* HookCollection classes wrap Arrays instead of subclassing Array
* Procsy is a class instead of a module
  * no more extending a Proc w/ Procsy at runtime
* Includes an interesting benchmark comparing passing proc
  around using `&block` vs `block`.