Output Formatter Refactor

I took some time to refactor the output formatters to try to reduce some of the redundancy between them.

I also threw in a YAML formatter to go along with the JSON one.