Uses alternative scheme for supporting temps

this seems easier implemented.  If the argument to enumerate() is an
lvalue then Enumerable is templated on an lvalue reference type (just
because of how universal references work).  Otherwise it gets templated
on a non-reference type.  the std::forward in the constructor results in
a move construction when templated on a non-reference type, and an
lvalue reference bind when it is a reference type.
Adds true temporary support to zip
Makes Zipped constrctor private and zip a friend
Fixes zip so one can modify data while iterating

I was using std::make_tuple to get the type of the value in the tuple,
but I neglected to realize this would cause it to drop the reference
part of the type.  By explicitly giving it
std::tuple<iterator_deref<Container>> this is avoided.  If the iterator
derefences to a reference type, the tuple will hold a reference.
More intense testzip

better test for temporaries. asserts to make sure the value of the
vector was changed after iterating.
Adds enumerate test with temporaries
removes old comments
adds test with temporaries
Complete rewrite of chain, safer, supports temps

Supports temporary values the same way zip does.  One thing I'd like to
be able to do is support a mix of types so something like
chain(std::vector<int>{1,2,3,4}, range(10)); would work
currently it doesnt because the iterators dereference to different types
(int& and int, respectively).  Idk if there's a safe way to handle this
that wouldn't be confusing outwardly.
Adds back ziptest that uses chain
Merge branch 'master' into copytemps
removes 'const' from imap begin/end
adds temporary test for imap