Extracted reporting functionality

This refactoring have moved a lot of the code responsible for reporting
test progress out of the runner and into a more generic polymorphic
structure, allowing for new types of reporters