Overhaul the fundamentals of test running to try and clean it up

Failfast should work better now (needs tests) but it still needs some
work. I'm not entirely happy with how outlines work (for instance).