Checkstyle support

This is prone to race-conditions. Example sequence of events (if my understanding is correct):
- Local tests finish
- Remote submission finishes. Local test results get overwritten, remote results shown.
- Local validation finishes. Local validation results get held in this object.
- New local tests finish. The results are shown with old validation results! New validation results get held up again.

In general architectural terms, this is a piece of global mutable state, which should generally be avoided (and I know it always hasn't been in both NB and our plugin).

Suggested simplification:
- Get rid of `ResultCollector`.
- Have `RunTestsLocallyAction` wait for both the checkstyle run and the test run to finish and then display the results directly. You can use `AggregatingBgTaskListener` to wait for multiple tasks. It's not a very nice tool but it does the job.