245a988c

Mutation: add SwitchFunctionArguments operator

## What

Adds a new mutation operator, **`SwitchFunctionArguments`**: at a prefix function (or data-constructor) application, for every pair of value arguments that have the *same type*, it emits one mutant that swaps those two arguments.

Examples (from the new `Example.SwitchArgsLib`):
- `divideThe a b = div a b` → `div b a` (one mutant)
- `makeColour r g b = RGB r g b` → three mutants: swap (r,g), (r,b), (g,b)
- `greyscale v = RGB v v v` → **no** mutants (every swap is a no-op)

## How

- Runs on the typechecked AST (`GhcTc`), reading each argument's type via `lhsExprType` and comparing with `eqType`. The same-type precondition guarantees the swapped application stays well-typed; the existing desugar-validation pass drops anything that slips through.
- **Maximal-spine only:** gated on `instrumentEnvAppDepth == 0`, so the curried sub-application `f a` inside `f a b` does not re-emit a swap the full spine already covers.
- **No-op skip:** pairs whose arguments have identical source text are dropped (the mutant would be identical to the original and unkillable).
- Rendering: a new `SwapSpans` source delta plus a pure, unit-tested `applySwapSpans` that swaps the two argument substrings in the source preview.

## Tests / feedback loops

- 4 new unit tests for `applySwapSpans` in `InstrumentSpec`.
- New `Example.SwitchArgsLib` + gen spec that kill every swap mutant.
- Disabled the operator on the symmetric `majorityOf5Wrapper` in `ConstFnLib` (its swaps are equivalent, unkillable mutants) and documented the new site on `impliesPair`.
- Golden manifests regenerated.

Validated locally:
- `stack build`/`test sydtest-mutation-plugin` — 34/34 pass
- `nix build .#checks.x86_64-linux.mutation-manifest-example` — PASS
- `nix build .#checks.x86_64-linux.mutation-sydtest-mutation-example` (all-killed) — PASS
- `pre-commit run --all-files` — PASS

Plugin version bumped to `0.4.0.0` with a CHANGELOG entry.