bdc2a40d

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Add TestId, TestIdTrie, and per-test filtering for mutatie

Adds the sydtest primitives needed by mutatie (mutation testing tool):

- New module Test.Syd.TestId with opaque TestId (description path +
  per-description sibling index), TestIdTrie for efficient subset
  filtering, and renderTestId / testIdFilterArg for human-readable
  output and CLI round-tripping.

- flattenTestForestWithIds: enumerate all TestIds from a TestForest in
  traversal order, assigning stable per-description sibling indices so
  duplicate descriptions are uniquely identified.

- filterTestForestByTrie: 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.

- execTestDefM': evaluate a Spec once and return both the TestForest and
  a TestIdTrie covering all tests, so the spec need not be re-evaluated
  in a mutation loop.

- getTestIds / runFilteredForest: public API for enumerating test IDs
  and running a pre-built forest filtered to a given trie.

- New --filter-id CLI flag and settingFilterIds settings field for exact
  single-test selection by TestId, composing with the existing --filter.