fix(ext/node): make fsPromises.watch() a proper AsyncIterable with close() (#32378)
## Summary
- The watcher returned by `node:fs/promises` `watch()` was a plain
object with only `[Symbol.asyncIterator]`, missing `next()` and
`return()` methods
- The returned object now properly implements the `AsyncIterator`
protocol, making it directly usable with `for await...of` and cleanly
stoppable via `break` or `AbortSignal`
- Improved abort signal handling (respects already-aborted signals, uses
`{ once: true }`)
Fixes #23562
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>