iterator support, lots of new tests