9f5fba2e

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

Mutation: order covering tests cheapest-first in the mutation child

When a mutation child runs the tests that cover a mutation, it runs them
synchronously under fail-fast, so the first covering test that fails kills
the mutant.  Ordering the covering tests cheapest-first (by the per-test
baseline the coverage phase already measures) reaches a killing test sooner
and reduces the mutation phase's wall-clock, since killed mutants are the
majority of a run.

- reorderTestForestByTiming: pure, tree-aware, stable reorder that sorts
  siblings by ascending baseline (missing = first) and orders each subtree by
  its minimum contained leaf cost, so a shared-setup group reorders as a unit
  and setup is never split.  It mirrors randomiseTestForest by leaving
  DoNotRandomiseExecutionOrder subtrees untouched, so it is legal wherever
  execution-order randomisation is.
- The coverage phase now persists the merged per-test baselines as
  baseline.json next to the manifest; the run and diff paths union them into
  the augmented dir the children read.
- The child reads that baseline and reorders the filtered forest after
  filtering (so the coverage-order ids the filter needs are untouched), gated
  on settingRandomiseExecutionOrder.