Adds BaseIterator
Adds BaseIterator

This is suppose to handle an iterable with different types for begin()
and end(). In the case where they are the same, there should be little,
if any, overhead generally. If they are different, there is some
branching that needs to happen but it doesn't seem too bad.

ryanhaining/cppitertools,ryanhaining/cppitertools,ryanhaining/cppitertools