refactor: rework async reporting using "fetch-keys"

- handle concurrent refresh requests
- allow requesting just the next batch
- simplify some function names and other cleanup