Remove usage of method_missing

My strong preference is to only use method missing when there is a sufficiently large number of methods that are going to be handled by it. When tracing through the code I noticed that this `method_missing` is only for three methods.

Explicitly defining the methods has these three major advantages:

* The code is easier to read
* The code is easier to trace with a debugger
* The code is more performant.

Open question: would you rather I use strings or symbols for the pattern parameter to `run_hooks`?