Refactor hooks
Created by: dchelimsky
Before this PR, the code supporting before, after, and around hooks uses classes that inherit from Array and extend individual Proc objects. This PR converts those into wrapper classes that delegate off to the wrapped arrays and procs.