Docblock for autocomplete support
Centralize and tidy up factories
Huge overhaul to implement project-wide classes

Now uses an abstract factory pattern.  Allows classes to instantiate
new classes without touching the DI container, and decouples things
for better testing.
Basic tests for DefaultFormatter