Sneak preview: refactor error/warning reporting

Using the PR validator to check I didn't break sbt/IDE. Feedback welcome, but I'll probably hold off a bit on this.
note to self: address the semi-rhetorical question, which is a `[30]` in Knuth notation, i.e., 2 hrs + margin if hulu.com is playing in another window.