cli: Add strobe-tolerant IR capture and bounded RGB retry
Builds on the core IR-selection primitives to give the CLI capture
helpers the enroll/test commands need.
# IR capture (strobe-tolerant)
`capture_ir_face` captures a short *burst* of IR frames, picks the
brightest via `select_brightest`, and runs detection only on that. This
is the fix for the strobed XPS 13 sensor: because the emitter alternates
lit/dark frames, "the brightest frame in the burst" is the illuminated
one regardless of where in the strobe cycle capture began — no luck, no
per-frame detection guesswork. The burst length is `DEFAULT_IR_BURST`
(4) when the mode is unknown; a later calibration pass can size it
exactly (1 for constant, `period` for strobed).
# RGB bounded retry
`capture_one_face_retrying` (unchanged in spirit) retries detection
across a bounded number of frames so a blink or unsettled pose doesn't
fail a modality. The bound is deliberate — this runs on the auth/test
hot path, where an unbounded "loop until a face appears" would hang the
login flow whenever no one is at the camera. `RetryCaptureOutcome`
distinguishes `Found` from `NoFace { attempts, brightest }`.
# Open path + diagnostics
`open_camera` now uses `Warmup::Frames(1)` for both kinds — purely the
STREAMON priming discard, with IR frame selection delegated to
`capture_ir_face` rather than a (now-removed) brightness-gated warm-up.
`frame_mean_brightness` becomes a thin wrapper over core's
`frame_brightness`. `DARK_FRAME_MEAN_THRESHOLD` + `CliError::IrTooDark`
turn an all-dark burst (illuminator never fired) into an actionable
message instead of a bare "no face".