Enhancements to `Context.apply`

The applied function now executes in the engine's `__main__` module. And the callings context's  `context_key` available to it. A `proxyize` function which stores the value it is given and returns a name which can be used to access the value is also available to the applied function. 

The `proxyize` function makes `apply`'s `return_proxy` kwarg obsolete, so it is removed.

So that all engines can create names in sync with `proxyize`, the client's random state is pushed to the engines and  uuid generation is determined by this state.