Some more simplifications and minor refactoring.

Things are starting to make somewhat more sense. A good checkpoint to
start testing and create more full scale integration tests.
Use a thread pool for running timeout tasks in StageRunner
Revert "Removed DocumentDiscardStage"

This reverts commit aed2e6d87b62ab2c57ec490173c06fa6e6c4c096.
Can now discard documents and updateded DocumentDiscardStage