Three changes to ensure headless Chrome process trees are fully cleaned
up when the daemon exits, whether gracefully or abnormally:
1. Spawn Chrome in its own process group (`setpgid(0,0)`) and kill the
entire group (`kill(-pgid, SIGKILL)`) in `ChromeProcess::kill()`.
This takes down all helper processes (GPU, renderer, utility,
crashpad) instead of only the main Chrome PID.
2. On Linux, set `PR_SET_PDEATHSIG(SIGKILL)` on the Chrome process so
the kernel automatically kills it when the daemon dies for any
reason, including SIGKILL/OOM. No macOS equivalent exists.
3. Replace `process::exit(0)` in the daemon's close handler with a
`Notify` signal back to the main loop, so Rust destructors
(including `ChromeProcess::Drop`) actually run.
Co-authored-by: ctate <366502+ctate@users.noreply.github.com>