find_sources: find build sources recursively (#9614)
Fixes #8548
This is important to fix because it's a really common source of
surprising false negatives.
I also lay some groundwork for supporting passing in namespace packages
on the command line. The approach towards namespace packages that this
anticipates is that if you pass in files to mypy and you want mypy to
understand your namespace packages, you'll need to specify explicit
package roots.
We also make many fewer calls to crawl functions, since we just pass
around what we need.
Co-authored-by: hauntsaninja <>