fix(watch): ensure TUI is shutdown regardless of exit path (#9408)
### Description
I noticed in https://github.com/vercel/turborepo/issues/9389 that the
TUI wasn't exiting if `watch` exited from anything other than a `Ctrl-C`
(including a direct SIGINT to the process). This PR ensures that we shut
down the TUI and the persistent task handle regardless of how
`watch.start()` exits.
### Testing Instructions
- Start up a watch task `turbo_dev watch dev`
- Find the pid file via `turbo_dev daemon status`
- Kill the daemon `kill $(cat /path/to/pid/file)`
Before
<img width="1365" alt="Screenshot 2024-11-07 at 5 42 22 PM"
src="https://github.com/user-attachments/assets/141831b4-8a82-485e-ac14-c0d72802cf81">
After
<img width="1286" alt="Screenshot 2024-11-07 at 5 39 08 PM"
src="https://github.com/user-attachments/assets/21acddb9-ae6a-4b78-b38d-1cbe0e0d3309">