Define Variant move- & copy-constructor conditionally

The move- and copy-constructor of the Variant class template are now
defined if the contained types are move- and copy-constructible,
respectively, allowing use of std::is_move_constructible and
std::is_copy_constructible for Variant specializations.