AsyncLocalStorage support
https://nodejs.org/api/async_hooks.html#async_hooks_class_asynclocalstorage

we should run every request in it so that errors can be traced to the original req/res even if they were called in a different event loop. this will also allow us to not pass req/res/ctx to track sources of errors.

the `store` would be `ctx`

```js
const ctx = app.asyncLocalStorage.getStore()
if (ctx) // ...
```