feat: add isTask() type guard for narrowing tasks to a moroutine
- Moroutines returned by mo() expose a readonly .id
- isTask(mo, task) narrows task to Task<T, A> inferred from the
moroutine's return type; useful when a pool handles tasks from
multiple moroutines and you want to recover the specific shape
- Task<T, A>.args is now typed as A (previously unknown[]), so
narrowing propagates through task.args — backward compatible
for Task<T> where A defaults to unknown[]
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>