Remove static module provider cache and move to require().

This has a couple of effects. Since we create a new require() object
when a new GlobalObject is created, the now non-static cache is a fresh
new one. This allows for cyclic dependency caching, but doesn't put a
big ugly code smell there in the way of a global static thing. It also
cleans up some of the require/module provider interactions making things
a little easier to follow.