Differrors: Much support for diff-checking

Upshot is that "--diff-check" should produce EXACTLY the same output as running from scratch.
In particular,  

A. produce the same errors (not just in the parts checked),
B. produce the same annotations ("").

This PR

1. Creates an `Output` type with `Result` and Annotations etc.,
2. Adjust the errors/annotations with diff.,
3. Combines (monoid) with new result

to yield the new `Output`. All final results **must** be included inside the `Output`
and rendered through `exitWithResult` and not in any other ad-hoc style.