the RecursiveRequireProxy needs to impersonate require so it can't have any other arguments besides request, and we must have access to the current sandboxedModule for each RecursiveRequireProxy and each RecursiveRequireProxy needs access to the shared cache variable.

The only way I can see to do this is to either bind the this variable or wrap it in another wrapped function for each sandboxedModule. 
Or perhaps we can put the shared state as a property of the sandboxed module, but I didn't want to change the SandboxedModule too much (though perhaps that's no longer a concern).