d0ac4152

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

Mutation redundancy: never let a kill-row mismatch flip the verdict

Code-review finding: writeKillRow used 'fail' on a TestId-alignment length
mismatch, crashing the child. The parent records a non-zero child exit as a
KILL, so a misaligned row on a *survivor* would silently mis-score it as
killed — letting the optional redundancy analysis corrupt the core mutation
verdict.

Extract the pure 'buildKillRow :: [TestId] -> [Bool] -> Either String
TestKillRow' (Left on length mismatch) and have the child skip+warn on Left
instead of crashing, so the child still exits on its real verdict.  Unit-test
the aligned, mismatched, and empty cases.