Use emplaceWithBackup in Variant assignment

Variant assignment operators were originally so implemented that it
creates a backup before assigning. Since commit fbb3d6d, however, the
emplace function the assignment operators depend on had not been
creating a backup in spite of the documentation comment for the
assignment operators.

This commit fixes the implementation and documentation of assignment
operators so that they match.
Add constexpr and const-ness to Variant helpers
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.