a291b99a

Add TestId, TestIdTrie, and per-test filtering (prerequisite for mutatie)

## Summary

- Adds \`Test.Syd.TestId\` with an opaque \`TestId\` type (description path + per-description sibling index), \`TestIdTrie\` for efficient subset filtering, and \`renderTestId\` / \`testIdFilterArg\` / \`parseTestIdFilterArg\` for human-readable output and \`--filter-id\` round-tripping.
- Adds \`flattenTestForestWithIds\` to enumerate all \`TestId\`s from a \`TestForest\`, assigning stable per-description sibling indices so duplicate descriptions are uniquely identified.
- Adds \`filterTestForestByTrie\` to filter a \`TestForest\` to exactly the tests in a \`TestIdTrie\`; wrapper nodes (\`beforeAll\`, \`aroundAll\`, etc.) are kept when any child matches and dropped when all children are pruned.
- Adds \`execTestDefM'\` to evaluate a \`Spec\` once and return both the \`TestForest\` and a full-coverage \`TestIdTrie\`, so the spec need not be re-evaluated in a mutation loop.
- Adds \`getTestIds\` and \`runFilteredForest\` as the public API for enumerating test IDs and running a pre-built forest filtered to a given trie.
- Adds \`--filter-id\` CLI flag and \`settingFilterIds\` field to \`Settings\` for exact single-test selection by \`TestId\`, composing with the existing \`--filter\`.

All existing tests pass. Golden files updated for the new \`settingFilterIds\` field in \`defaultSettings\` and the new \`--filter-id\` flag in the CLI documentation.

## Test plan

- [ ] \`nix flake check\` passes (verified locally)
- [ ] \`stack test sydtest-test\` passes (133 passed, 0 failed)
- [ ] Pre-commit hooks all pass (ormolu, hlint, hpack, cabal2nix)

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 5m11s 2s 2s 5m14s 5m11s
Eval 5m16s 2m20s 2m20s 7m36s 2s
Build - - - - 8m22s
Suite 5m11s 2m22s - - 13m36s