Simplify reduction operation implementations and error handling
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.