Decoupling and improving code quality

Making strides to increase code quality, moving towards testable code
through IoC/DI and overall decoupling and new interface implementations.
Generally just trying to make the project a bit better designed.