Create an unrestricted union supporting field specific constructors, destroying,
move and copy construction (as well as copying and moving), and swapping.
