Add `union` support to the C backend.
There are some differences vs. the union encoding in the LLVM backend:
- Tagged unions with a 0-bit payload do not become their tag type. Instead,
they are a struct with an empty `union` as their payload field.
- We do not order the `payload`/`tag` storage based on their alignment C
Cody Tapscott committed
587a4437dbe4518671f4a894edb7d0f8e51d2ee1
Parent: 983dfcd