Redefine TypeTag with template parameter pack
Add comparison operators for single-typed TypeTag
Add TypeTag specialization for multiple type parameters
Add TypeTag specialization for empty type parameters
Show type name for TypeTag in testing
Simplify IsNothrowSwappable definition
Remove Union::construct and constructFrom

in favor of the constructor. In C++14, the Union constructor overloads
would be constexpr.
Add Union::value overloads for rvalue context
Redefine VariantBase using TypeTag as index

In this refactoring commit, the Index type alias (which was int) is
removed in favor of TypeTag. The VariantBase class template now contains
TypeTag instead of Index.

The Union union template now has no Index template parameter. The
VariantBase class template now has the Tag type alias member. The
convertIndex method is removed because conversion is now performed by
the TypeTag implementation.

Tests that compare tags now include TypeTagTestHelper.hh for more
readable test result report.
Add CommonResult class template

The TypeTag::apply method is not using CommonResult because the static
assertion in the existing implementation would allow the compiler to
diagnose type mismatch errors more specifically.
Don't require Result type in VariantBase::apply

The result type is now automatically inferred from the return type of
the visitor's call operator.
Rename Variant::index -> tag

The member function name is aligned with the type name.
Disable conversion from TypeTag to Variant

Previously, Variant<int, TypeTag<int>>(TypeTag<int>()) was constructing
a variant containing a TypeTag<int>. There was no way to direct
initialize a variant containing an int. After this commit, when the
first argument to a variant constructor is a type tag, it is always
treated as a tag specifying the type of the new contained value, rather
than an object from which the new contained value is copy-constructed.
Generalize Variant::emplace argument

The emplace function no longer inserts the type tag argument so that
callers can choose other kinds of construction.

The Emplacer helper class template is removed because emplacement with
copy/move constructor now can be done by the emplace function directly.
Support noexcept in Variant functional initialize
Generalize Variant::emplaceWithFallback argument

The emplaceWithFallback function no longer inserts the type tag argument
so that callers can choose other kinds of construction.
Generalize Variant::reconstructOrTerminate argument

The reconstructOrTerminate function no longer inserts the type tag
argument so that callers can choose other kinds of construction.
Add Variant::emplaceWithBackup function
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