Redefine variant reconstruction in emplacement

Previously, the reconstruct_or_terminate function was defined as a
non-static member function template of the variant class template. This
function is meant to be called for an object that has been destructed,
but C++11 3.8/5 does not allow such a call to non-static member
functions. For object reconstruction to have a well-defined behavior,
the reconstruct_or_terminate function should be defined as a non-member
function.