Declarative async flow control for JavaScript