turbo-tasks-backend: fix snapshot coordination races + extract SnapshotCoordinator (#93416)
Hold a lock while persisting so two snapshots cannot execute
concurrently
* Currently if `stop` is called while an idle snapshot is running, then
snapshotting can race with itself, this can corrupt the use of the
`in_progress_operations` parameter since two threads will `fetch_or`
with it and wait for the bit to be cleared
Abort the process if `panic!` occurs during task spawning
* Currently if `try_start_task_execution` panics it ends up hanging a
task which can deadlock the process, in this case we have no better
option than to just log and abort.
* I considered strategies that would 'poison' the task or possibly all
of turbo-tasks and this is attractive but i believe fundamentally
unsafe, the most likely cause of these panics is something wrong with
state tracking in the backend, so exiting is all we can do