v2 builder: extract makeGhcShim, share between slice and shell
Move the ghc-shim construction (cabal near-compiler aliases, ghcjs `ar command` settings patch, native-musl unlit/iserv aliases) out of `build-cabal-slice.nix` into `builder/ghc-shim.nix` so the v2 shell can use the same base.
`shell-for-v2.nix` previously did:
* cabal-store mode: `shellGhc = ghc` (raw) — no aliases, no `-B<libdir>` for musl, no ghcjs settings patch. A `.lhs` compile or TH eval in this shell on musl ≥ 9.10 / ghcjs would hit exactly the same failures the slice did before the recent fixes.
* ghc-pkg mode: a `wrappedGhc` that took raw `ghc/bin/*` and wrapped just `ghc{,i,-version,i-version,-pkg}` / `runghc{,haskell}` / `haddock` with `GHC_ENVIRONMENT` / `GHC_PACKAGE_PATH` env vars. Same alias gap.
Now both modes build on `baseShim = makeGhcShim { inherit ghc; }` (same derivation `build-cabal-slice` points `--with-compiler=` at):
* cabal-store mode: `shellGhc = baseShim` — byte-identical to the slice's ghc.
* ghc-pkg mode: `wrappedGhc` layers makeWrapper env-var wrappers on the shim's bins. Wrapping a wrapper is fine — the outer wrapper exec's `baseShim/bin/...` which exec's real ghc with `-B<libdir>` (when applicable). Symlinks every non-wrapped shim binary into `$out/bin/` so PATH still finds alex/happy/hsc2hs/unlit/etc.
No semantic change to the slice's behaviour; shell now inherits the alias fixes.
Verified on aarch64-darwin.unstable.ghc967.native.tests.shell-for-setup-deps.run.