2858adeb

Add in-process mutation testing infrastructure

## Summary

- Adds three new packages: `sydtest-mutation-runtime`, `sydtest-mutation-plugin`, `sydtest-mutation-example`
- Adds a GHC plugin (`Test.Syd.Mutation.Plugin`) that instruments source code at typecheck time, wrapping mutation candidates with `ifMutation` calls
- Adds `--mutation DIR` flag to sydtest (repeatable); when set, runs the test suite once per mutation in the manifest directory, in-process, reporting killed/survived counts
- Manifest format: per-module JSON files (`<dir>/<ModuleName>.json`), one per instrumented module, each an array of `{id, operator, original, replacement}` records
- Adds Nix helpers (`addManifest`, `compileMutationReport`, `assertMutationScore`) for building mutation checks as Nix derivations
- Adds e2e CI checks for `really-safe-money` and `safe-coloured-text` (the latter demonstrates multi-library instrumentation with golden test resource support)
- Adds `mutation-testing-architecture.md` documenting the design

## Key design decisions

- **In-process**: the test suite binary contains all mutations; `ifMutation` selects which one is active via an IORef — no recompilation per mutation
- **Per-module JSON manifests**: each instrumented module writes its own file; sydtest reads one or more manifest directories via repeated `--mutation` flags
- **`sydtest-mutation-runtime`** is the shared leaf package depended on by both the plugin and sydtest, keeping the GHC API out of sydtest itself

## Test plan

- [ ] `nix flake check` passes (CI runs `mutation-really-safe-money` and `mutation-safe-coloured-text` end-to-end checks)
- [ ] Check that `--mutation` flag appears correctly in `--help` output
- [ ] Review `sydtest-mutation-example` to confirm the plugin instruments as expected