dup expr alias base when reducing via fold
make a bunch of iterators structs instead of classes to cut down on allocations