On Windows, child.kill('SIGTERM') only terminates the cmd.exe wrapper,
leaving the inner opencode.exe serve running as an orphan. This adds
killProcessTree() which runs taskkill /PID /T /F first, then falls
back to child.kill('SIGTERM') for the close() method.
Fixes #1889