support for recursive requires (creating a virtual enviornment)

I've added support for recursive requires - so that you can contain an entire virtual enviornment in sandbox.
That is if you sandbox a module that requires another module, the second module will also be loaded using SandboxedModule (using the same globals as the original sandboxed module)

You can enable it by passing options.recursive:true .

The new module creates a shared global state and provides it's own module cache implementation (of a sort).