code: function(set, options) {
  
  		// Go through non-where clauses in algebra, remove those properties from a set clone.
  
  		options = options || {};
  
  		var setClone = assign({}, set);
  
  		var clauses = this.clauses;
  		var checkClauses = ['order', 'paginate', 'id'];
  
  		var clauseProps = {
  			enabled: {
  				where: true,
  				order: false,
  				paginate: false,
  				id: false
  			}
  		};
  
  		if(options.omitClauses) {
  			checkClauses = h.arrayUnionIntersectionDifference(checkClauses, options.omitClauses).difference;
  		}
  
  		each(checkClauses, function(clauseName) {
  			var valuesForClause = {};
  			var prop;
  
  			// Go through the defined properties in this clauses
  			for(prop in clauses[clauseName]) {
  				// if it exists in the set, add it as a value for that clause
  				if(prop in setClone) {
  					valuesForClause[prop] = setClone[prop];
  
  					// id clause properties are also where clause properties, so leave them to be added to where clause
  					if (clauseName !== 'id') {
  						delete setClone[prop];
  					}
  				}
  			}
  
  			clauseProps[clauseName] = valuesForClause;
  
  			// if there are properties set for this clause
  			clauseProps.enabled[clauseName] = !isEmptyObject(valuesForClause);
  		});
  
  		// everything left is where
  		clauseProps.where = options.isProperties? setClone : this.translators.where.fromSet(set, setClone);
  
  		return clauseProps;
  	}
docs: Breakup `set`'s properties by clauses in the algebra. options: - omitClauses - clauses that should not be pulled out  returns: - enabled - an object of which clauses are actually being used by this set. Where is true no matter what. - [clauseType] -  each clause type has the sets for that object