Query Validation: refactored the query validation from the QueryValidator class (previously in the Mapper class) into individual Validator classes - this way a) they can be tested individually, b) it's also possible to express the difference between failing validation and not applying it and c) it makes the code more readable.