When a workflow file changes while runs are active, defer the
drain+respawn until all active threads finish instead of immediately
killing them.
- Add drainWhenIdle() with pendingDrains tracking
- Wire maybeDeferredHotReloadDrain into thread-event and workflow-error paths
- Clean up pendingDrains on worker crash and stop()
- 6 new test cases in hot-reload.test.ts
Fixes#134