Support function arguments to with blocks

The current implementation of 'with' blocks doesn't seem to make much sense if the context passed in is a function rather than an object.

Executing the function and using the results in this case allows for an object to have context-generating functions without any obvious downsides.