Non-branching function calls

When a global function pointer's value is taken,
it is now substituted by a wrapper function that
takes a context argument which is simply dropped.
This allows us to treat all stored functions as
having the additional context argument, without
forcing all functions to have that argument.

We may want to force all functions to later have
the argument (i.e. no wrappers), but for now this
is the simpler/more expedient approach.