stage2: implement union coercion to its own tag

* AIR: add `get_union_tag` instruction
   - implement in LLVM backend
 * Sema: implement == and != for union and enum literal
   - Also implement coercion from union to its own tag type
 * Value: implement hashing for union values

The motivating example is this snippet:

    comptime assert(@typeInfo(T) == .Float);

This was the next blocker for stage2 building compiler-rt.
Now it is switch at compile-time on an integer.
09e1f37cb6Andrew Kelley committed on 9/28/2021, 6:11:00 AMparentc2a7542
11 files changedLine totals unavailable