Refactor formatters

Clarifies the inheritance hierarchy, and adds specific constructors for formatters that use Console\IO rather than IO\IOInterface
you should clean the use statements for these exceptions