Action runner contract. Receives the controller's success/error
routes and returns a cancel handle. The runner is opaque to the
controller — it can wrap any async source (Observable, Promise,
sync value) and any cancellation primitive.
Variants supply their own runner adapter (e.g. select's
runCommitAction invokes a CngxSelectCommitAction<T>; stepper's
runner adapts a CngxStepperCommitAction); the controller has no
knowledge of the variant-specific action shape.