Safe support for temporaries in enumerate

I will need to add this to everything soon.  This works by adding an
overload to the enumerate() function.  If an lvalue is passed, the
Enumerable binds an lvalue to it.  If an rvalue is passed, the
Enumerable move constructs it.  It's easier explained in the code.

Also, must make the value constructor private again to complete this
Restores privacy to enumerate
Merge branch 'copytemps'