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.