Allow server.inject to be overwritten via an option and take a callback

Also:
* Drops internals
* Uses closures instead of trying to explicitly pass dependencies everywhere
* Improves docs on existing functionality and options
* Adds additional tests
Generate code coverage
Reorgnize