Making the tests run asynchronously giving an update at each stage.

This frees up the UI thread from the test framework allowing for tests to
scroll through as they are passing or failling making the application much
more responsive.