Replaces recursive iterators with flat array
Replaces recursive iterators with flat array

Because TupleStarMapper::Iterator::operator* causes a recursive call, it
gets slower as one goes further along, the cost of longer tuples is
unexpectedly high.  This new scheme uses a set of classes templated on
the index they use in std::get, all inheriting from a common base.
An array of base class pointers can then be indexed into.  It incurs a
virtual function call but that's worth it.  The dynamic allocation seems
to be the bigger cost, but it's possible that can be alleviated as well.

ryanhaining/cppitertools,ryanhaining/cppitertools,ryanhaining/cppitertools