Refactored iteration.

Hopefully should be a bit more flexible. It's a bit ugly to not say
begin = zipToSmallest . unZip, but I'm not certain I want to expose
a Zipper to a Nil to the user. It's sort of like a null pointer, and
that's the sort of thing you cover up with a Maybe.
Added QuickCheck tests.