If must_build was nonempty when recursively calling isdirty() that returned a list, we'd lose the original value of must_build.
It was getting way too ad-hoc in there. Let's reorganize the tests so that there's a good, obvious, suggested sequence to run them in.