TypeScript async producer-consumer queue with backpressure control, similar to Go channels or .NET Channel<T>