Better output architecture

This is a re-architectur of the output handling.  It pulls all the colour stuff into the responsibility of a formatter which has more semantic methods to write output (notice, error etc).  The output is the same, but the code to know what error 'looks like' is no longer spread through the code.

The upshot is would can have output formatters to other things (such as HTML).

This fixes #54