Added optional third argument for execution context

If a context is given, the callback is always applied to it instead of `this`.