16456eb1

Add RemoveCase and RemoveAction mutation operators

## Summary

- **RemoveCase**: For a `case x of { A -> a; B -> b; C -> c }`, generates every version with one arm removed (n mutations for an n-arm case, only fires when n ≥ 2). The desugarer validator filters out any removal that produces a type error.
- **RemoveAction**: For a `do { a; x <- b; c x; d }`, generates every version with one `BodyStmt` (no-`<-` action) removed. `BindStmt`, `LetStmt`, and `LastStmt` are left alone to avoid invalidating downstream variable uses or breaking the do-block structure.
- Added example source files (`CaseLib.hs`, `DoLib.hs`) and a test (`CaseLibSpec.hs`) demonstrating the new operators.

## Things to check

### Code review
- `RemoveCase`: The operator matches `HsCase x scrut (MG mgx (L lann alts))` and drops each alt in turn. Worth confirming the `MatchGroupTc` extension field (`mgx`) can be safely reused for each sub-match-group (it carries the result type and origin, which don't change when we remove an arm).
- `RemoveAction`: `isRemovableStmt` only matches `BodyStmt {}` — confirming that `LastStmt` is a distinct constructor and never a `BodyStmt` is important for correctness. Checked against GHC source: confirmed.
- The `XDo GhcTc = Type` field (`x`) is passed through unchanged when rebuilding the `HsDo` node — this is the monadic type of the do block, which is unaffected by removing an action.

### Try out locally
- Run the mutation example test suite to see the new operators fire: `stack test sydtest-mutation-example-gen --pedantic`
- Inspect the generated manifest to see `RemoveCase` and `RemoveAction` mutations appear: build with the plugin and look at the `.mutation-manifest` output.
- Try a case expression with 2 arms — should produce exactly 2 mutations.
- Try a do-block with only `BindStmt`s and a `LastStmt` (no `BodyStmt`) — `RemoveAction` should produce no mutations.

## Remaining questions / suggestions

- Should `RemoveCase` also fire on `LambdaCase`? At GhcTc, a `\case` desugars to `HsLam _ _ (MG ...)` rather than `HsCase`, so the current operator does not cover it. Could be a follow-up.
- The description strings ("removed #1", "removed #2") are opaque without context. A future improvement could include the pattern text of the removed arm (needs reading source lines).