refactor(serve): make listen() take AsyncIterable; intern PushChannel
Move PushChannel/pushChannel out of the public moroutine API and into
src/serve/ as an internal helper. listen() and ListenArgs now accept the
general AsyncIterable<number> interface so moroutine can transparently
transfer the iterable cross-thread without coupling to a specific type.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>