feat: task-arg resolution and caching on workers
When a Task is passed as an argument to another moroutine, the worker
resolves it on first encounter and caches the result by task uid.
Subsequent calls with the same task reuse the cached value. This enables
worker-local context patterns — the resolved value never crosses thread
boundaries, so it can hold complex non-serializable state like database
connections or compiled indexes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>