The body of discover, with the roots supplied rather than derived.
Separated so tests can walk a temporary directory. A test that called discover
would walk whatever ~/Code happens to hold on the machine running it, which is both
slow and a different answer on every machine.