SIGN IN SIGN UP

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