Refactored formatters to be registered as services.

This should make it easier to provide custom formatters in extensions. Discussion started in #198 


What I still don't like about the existing code are checks which make sure that right IO service is passed to a formatter: `$formatter instanceof Formatter\HtmlFormatter`. I'm not sure how common this will be in 3rd party formatters, but might be a good thing to introduce an interface here?