Re-implement failing scenarios

I've added a little more detail to the `LegacyScenario` to capture the name
and location, so that we can use them to print out a meaningful set of
failures. Also took the opportunity to clean the `print_stats` code by
extracting a few methods.