relaced decay with decay_t
marks operator* as decltype(auto) in imap iterator
adds test for starmap
adds starmap
adds starmap to itertools.hpp
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.
adds starmap test with pair of tuples
supports starmap over a pair
implements imap in terms of starmap

and gets rid of nearly the entire imap.hpp in the process