test/* + migration guide: v2-compatible test migrations
Migrates the in-tree test suite to work under `builderVersion = 2`.
Adds `docs/dev/migrating-to-v2.md` documenting the patterns we hit,
keyed off the symptoms users are likely to see when flipping the
flag on their own projects.
Patterns covered (with file-level examples):
* Library / executable profiling — `.profiled` overlay replaced by
a sibling project whose `cabalProjectLocal` carries
`library-profiling: True` / `profiling: True`
(`test/exe-dlls`, `test/exe-lib-dlls`, `test/gi-gtk`,
`test/th-dlls`, `test/th-dlls-minimal`, `test/js-template-haskell`,
`test/cabal-simple-prof`).
* Coverage — module-level `doCoverage` mirrored into
`cabalProjectLocal` `coverage: True` (`test/coverage`).
* DWARF — `.dwarf` overlay dropped, replaced by
`compilerSelection = … c.dwarf …` + `debug-info: 2`
(`test/cabal-simple-debug`).
* Sublib haddock — `documentation: True` in `cabalProjectLocal`;
output path moved so `find -name <Module.html>` accepts both v1
and v2 layouts (`test/sublib-docs`).
* Per-package `ghc-options` — `HsOpenSSL` workaround moved from
`test/modules.nix` to `test/cabal.project.local` (`test/modules.nix`).
* Per-package `extra-lib-dirs` — Windows `test-clib` paths moved
into `cabalProjectLocal` (`test/th-dlls-minimal`).
* `ghcOptions` scope — moved from per-component to per-package
(`test/th-dlls`).
* `shellFor` migration — `component.shell` / `component.env` →
`project.shellFor { exposePackagesVia = "ghc-pkg"; }`
(`test/with-packages`, `test/shell-for`,
`test/shell-for-setup-deps`).
* `withHoogle = false` on static — avoids `.dyn_hi` lookup failures
in hoogle's haddock chain (`test/with-packages`).
* `origSrc` / `origSubDir` workaround — synthesised package-root
drv with `.git` at the top, source-cleaning disabled via
`outPath` + `filterPath` (`test/githash`).
* Custom-setup `base` / `directory` — added to explicit
`setup-depends` (`test/setup-deps`, `test/shell-for-setup-deps`).
* Native-musl `git` — host vs build-build picker keyed on
`haskellLib.isNativeMusl` to avoid glibc/musl libc mixing
(`test/githash`).
* Android cross — `test/cabal.project.android` injected
conditionally (`test/exe-dlls`, `test/exe-lib-dlls`,
`test/th-dlls`).
* `useLocalGhcLib = true` — earlier change (PR #2510) covered
separately; referenced in the guide for completeness.