Refactor formatters

Clarifies the inheritance hierarchy, and adds specific constructors for formatters that use Console\IO rather than IO\IOInterface