release_tts_lease() unloaded resident local models inline the moment the
holder count hit zero, so a wake-only voice conversation that ended right
after its ~2s Piper warm-up evicted the voice, and every wake reloaded it.
The last release now schedules the unload on a cancellable timer
(tts.keep_warm_seconds, default 60, 0 = immediate); any acquire in the
window cancels it, and a warm-up that finishes with no holders restarts
the window so a mid-load release can't leave the model resident forever.
Fixes#118037