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.