Refactor formatters

Clarifies the inheritance hierarchy, and adds specific constructors for formatters that use Console\IO rather than IO\IOInterface
this looks useless as it is already done in the parent class ConsoleFormatter (IMO, you could remive the overwritten constructor entirely)