monopam/root: derive scan_dirs from the filesystem, not Package URLs
collect_external_deps used Package.subtree_prefix (which derives
the directory name from the basename of the dev-repo: URL) to pick
which subtrees to scan. That works only when the URL basename
matches the in-monorepo subtree directory.
Forks intentionally violate that: their dev-repo: now points at the
upstream URL so opam-repository directs users at the canonical home,
which means the URL basename (e.g. ocaml-claudeio, ocaml-cbort) no
longer matches the in-monorepo subtree (ocaml-claude, ocaml-cbor).
The result was that internal packages from forked subtrees leaked
into root.opam as "external" deps.
Walking subtree_dirs directly aligns the dep collection and the
internal-package exclusion set with the actual layout, regardless
of what each .opam declares as its dev-repo.