Introduce dependency injection

Maven modules seperated for DI dependencies. Closes #8 and #2