Split AssignableVariant into Move- & CopyAssignableVariant

The move and copy assignment operators of the Variant class template are
now defined if the assignments are well-typed, allowing use of
std::is_move_assignable and std::is_copy_assignable for Variant
specializations.