Trivial cleanup: use enum_is_univariant
Factor out base::get_discrim_val from const translation
Translate constants in get_item_val, to obtain the initializers' types.

This breaks the connection between the LLVM type and the Rust type,
which is necessary to use non-nullary enum constructors, where the
type_of type is an i8 array sized to the largest variant, as const
initializers.  LLVM disallows bitcasts between aggregate types, even if
their sizes match, so we couldn't solve this by appending unnecessary
padding even if we wanted to.

The general idea should be sound, because accessing the enum value just
casts it to `{i64, i8}` anyway (and then re-casts the pointer to the
`i8` to the actual variant's type to access it), so we weren't gaining
anything from LLVM-level type checking anyway.
Allow consts to be non-nullary enum constructors
Omit needless zeroes for C-like variants of non-C-like enums
Add more tests for enum constants.

The tests have consts defined both before and after their uses in order
to prevent bugs that depend on the order in which they are translated.
Oops: also need relaxed typing for enums in stack slots