refactor: make Task<T, A> a pure descriptor; keep protocols on live tasks
Task<T, A> now carries result and arg types via brand symbols, without
PromiseLike or AsyncIterable protocols. Live tasks returned by mo()
intersect with the appropriate protocol for awaiting/iteration.
Enables accurate result-type inference for helpers like map() that
consume inert Task values — the bare descriptor can be yielded from
a generator or held in arrays without triggering auto-await.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>