Refactor Reader logic

We have a semi-functioning refactored reader, checkpointing before starting
async work.

Many unit tests fail, but most basic functionality works.
Async WIP