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
587a4437dbCody Tapscott committed on 1/24/2022, 7:00:04 PMparent983dfcd
2 files changedLine totals unavailable