Issue 10194. Variant does not call struct destructors.

First commit fixes [issue 10194](https://issues.dlang.org/show_bug.cgi?id=10194)
The second commit adds support for elaborate copying.
Ditto. Should use `hasElaborateCopyConstructor`.