gitlab-runner: TTL-based cleanup of stale suspended environments (Fleeting-based executors)

MRs:

Implement a background loop in the runner that tears down suspended environments whose TTL has expired. This is the safety net for crashed workflows, abandoned sessions, and orchestrator bugs.

  • Track suspension timestamp per acquisition in the runner's persisted state.
  • Periodically check for expired environments (configurable TTL, default 1 week).
  • On expiry: call scaler.Terminate to release the acquisition and tear down the instance.
  • Must survive runner restarts (suspension state is already persisted to disk).
  • Log each expiry for operator visibility.
Edited by Ashvin Sharma