add once_eq and iterate_equiv, abstract versions of fold_equiv