cli: Assess and report liveness in dual-modality test
`test` now runs the liveness policy against the IR capture and reports
it. The IR modality captures inline (via the new `capture_ir` helper)
instead of through the RGB retry path, so the full burst is retained and
handed to the policy as a `LivenessInput`. The burst is sized with
`liveness_burst` so the micro-motion check has enough same-phase frames.
Output gains a `Liveness:` line with the combined score, the threshold,
the applicable/total check counts, and a per-check breakdown (including
`NotApplicable` lines, so it's visible why a sensor's ceiling is what it
is). A new `--liveness-threshold` flag (default 0.0) gates the verdict:
a passing identity match is downgraded to `Reject (liveness)` if the IR
capture didn't clear the threshold. At the default 0.0 this never
fires — liveness is observe-only until profiled, exactly the posture for
untuned heuristics.
Also simplifies the old `try_capture_face` into an RGB-only
`capture_rgb_face`: the IR branch and its `kind`/`ir_burst` params became
dead once IR moved to the inline burst-retaining path, so they're
removed rather than left as misleading cruft.
Liveness is wired on IR here, but the framework is modality-agnostic;
RGB liveness (retain RGB frames, run the same policy) is a documented
future step.