feat: added reflection-free StaticInjector

- First step towards #10.
- Refactored the Injector into an interface that has two implementation: DynamicInjector and StaticInjector.
- Refactored Module to be generic.
- Changed semantics of factory binding to make it codegen friendly -- factory method has only one argument: Injector and the method is responsible for retrieving its own dependencies through that Injector.
- Injector lost invoke method, however DynamicInjector still has it.