I feel a little nervous about trying to equate Python iteration semantics and C++ iteration semantics since they might be slightly different; for instance I think you're supposed to be able to copy C++ iterators and then be able to iterate multiple times.  It looks like it still works if we simply take out the inheritance from std::iterator; what do you think?