Refactor formatters

Clarifies the inheritance hierarchy, and adds specific constructors for formatters that use Console\IO rather than IO\IOInterface
Ah ok.

Currently need to keep the capture of $presenter because it's used in setPresenter and declared as private in the parent.