fix: use signal.NotifyContext for container cleanup on SIGINT/SIGTERM (#2808)
Replace manual goroutine-based signal handlers in predict and train
commands with signal.NotifyContext. This ensures the context is cancelled
on SIGINT/SIGTERM, causing in-flight operations to return and the
deferred container cleanup to run reliably.
Previously, the deferred predictor.Stop() would not execute when the
process received a signal, leaving orphaned Docker containers running.
Fixes #2799
Co-authored-by: Mark Phelps <209477+markphelps@users.noreply.github.com>