Add log-on-failure mode

Add a new mode, log-on-failure. It should:

* Continue appending to the saved log
* Print to the original streams for failed tests
* This is designed to improve developer convenience, keeping passing tests quiet and making failing tests noisy.

Rebased as suggested.  I also squashed some commits to make it clearer what you are getting:

* Commit binkley/system-rules@fb4c976 could be cherry-picked separately; it has `PrintStreamLog` extends `TestWatcher` rather than `ExternalResource`
* Commit binkley/system-rules@cc86caf add log-on-failure mode, requiring previous commit to get at `TestWatcher#failed(Throwable, Description)`.

Cheers,
--binkley
Pleas use an `if` instead of the `switch`.