As explained in http://eel.is/c++draft/range.nonprop.cache#note-1, we
should allow copy and move elision to happen when calling emplace_deref
in non-propagating-cache. Before this change, the only way to emplace
into the non-propagating-cache was to call __set(*it), which materialized
*it when binding it to the reference argument of __set and disabled
As a fly-by change, this also renames __set to __emplace for consistency
and adds tests for it.