Prefer for over forEach, call over apply

Some performance cleanup stuff.
This is the only odd thing in this PR. `callHook` is only ever called with a max of two arguments so I've hardcoded it here. I can blow this out into a more complex but future-safe method if desired.