Result pipeline

This decouples test result *collection* from result *display*, moving to more of a pipeline approach to result processing.

This will make it easier to add different ways of presenting results and ease the implementation of a distributed/multiprocessing test runner by allowing reuse of the result collection code.