Make ModuleAdapter implementations stateless

By passing module instances in on getDependencies() (and using that to prime the Provides method bindings, ModuleAdapters can be stateless, and then cached, avoiding the need to re-load them via classloading.