add ability to specify clauses as objects which support the iterator protocol