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.