adding any() and all() with generic predicate iterator that supports shortcircuiting
decoupling enumeration injection from this to a passed in value
adding distinctby