Adding Criterion class. Criteria may store boolean logic for later reuse, and may refer to other Criterion to build very complex chains