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)