fix: Improve behavior for OOM-killed tasks (#11477)
## Summary
**Behavioral change:** Previously `ChildExit::KilledExternal`,
`ChildExit::Finished(None)`, and `ChildExit::Failed` returned internal
errors (`InternalError::ExternalKill`,
`InternalError::UnknownChildExit`). Now they're handled as normal task
failures with proper exit codes, error logging, and respect for
`--continue` flags.
Changes:
- `KilledExternal` → task failure with exit code 137 (SIGKILL
convention)
- `Finished(None)` / `Failed` → task failure with exit code 1
- Add OOM detection hints for Windows NT status codes and Unix exit code
137
- Remove `InternalError::ExternalKill` variant
This means externally-killed tasks now behave consistently with tasks
that exit non-zero rather than causing internal errors.