hashset: Implement SetAlgebraItems a bit more properly
hashset: Use separate iterators for Intersection and Difference

This removes the type SetAlgebraItems and replaces it with either
IntersectionItems or DifferenceItems and is therefore a:

[breaking-change]