This ticket should handle the following tasks:
- Retrieving the next document from the prior stage if requested
- Caching documents in a partition to be re-used by multiple consumers
- Supporting an advance() type method to move the current doc pointer
- Detecting a partition key change and setting the new document aside until advanced to it
To start, documents will only be freed once advance moves past the end of a partition.