Fix process hang: cancel timeout timer when osascript exits
The DispatchQueue.global().asyncAfter timeout timer was never cancelled
on normal process exit, keeping the Swift runtime alive for up to 10
minutes per AppleScript export. Store the DispatchWorkItem on
ProcessHandle and cancel+nil it in terminationHandler.