Variant implementation enhancement

- [x] Include TypeTagTestHelper.hh in tests using `Variant::tag`
- [x] `operator=` uses `emplace` in the wrong way
- [x] Reconsider `reset` and `assign`
- [x] Add `emplaceWithBackup`
- [x] Support `noexcept` in functional initialize
- [x] Consider merging `VariantBase`, `AssignableVariant`, and `Variant`
- [x] `constexpr` `Constructor` and `Assigner`
- [x] Reconsider requirements of variant data members