Iteration every where

Unified approach to iteration. Now it is "easy" to write the iterators
for a collection. Just implement the Iterate()KVIterator method and you
can easily implement the Keys() and Values() iterators. However,
sometimes implementing the Iterate() method is kinda of difficult do to
the weird way the execution works. Basically, these iterate methods have
to be a tail recursion if you can't make tail recursion work you are
kinda screwed. Luckily, we know we can always use CPS to make the method
tail recursive.

Signed-off-by: Tim Henderson <tim.tadh@gmail.com>