Use EventCollector if possible.

Avoids duplicate implementations of RunListener for different test and
provides Hamcrest matchers for verifying events sent to the listener.
I know this code is "just for testing" but can we wrap the return value with `Collections.unmodifiableList()` ?