Simplify reduction operation implementations and error handling
(Targeting feat/compress-keys
for now, as it requires significant refactoring to work for trunk right now)
Simplifies the implementation of reduction operation by moving the boilerplate iteration over applicable sources and/or keys to some generic machinery, as well as adding some custom exception types to propagate fatal error conditions from the ReduceWriter
initializer back to the CLI and exit gracefully without an unchecked exception.