Negative Scenario Engine

I'll add some tests around this. Agree that it's a bit of a "black box", but to pull into pieces would be fairly complex as well (each "block" looks to be working with many data structures, so passing these around is probably more confusing than keeping this in the same method).