Add ability to fork an Iterator to continue iterating from the current position along two different paths.

This is basically a clone that doesn't reset the cloned iterator
Use conformsToInterface instead of checking individual methods
First pass at support for repeating a given iterator a range number of times.
First pass a repeat iterator implementation