Classify ADT representations
Convert _match to use trans::adt (and fix bugs in it).
Attempt to fix struct types
Regular and sizing types
Convert type_of
Avoid unnecessary casts in struct_GEP
Change spelling of FIXME to placate tidy
Re-add discriminant range annotations
Add a test for enum discriminant range overflow.

It causes an LLVM assertion for every host/target word-size combination
on incoming at the time of this writing.
Renovate expr_tup translation
Convert expr_struct to use adt, and try to share code with tuples.
Renovate nullary variant construction
Renovate field projection expressions
Convert the rest of the adt GEPi's in _match
Add regression tests for a subtle aspect of expr_struct translation.

The first is reduced from a case in rustdoc (originally involving an
ARC); the other is related.  No committed version has gotten these
wrong, but when I broke them it showed up only in rustdoc; there was
nothing in the test suite (or the compiler!) that failed.

The general issue is that the statics and trans have to agree on order
of evaluation, or else you get use-after-move-out-of errors at runtime.
Convert newtype "dereference" to trans::adt.

Note that in the ByValue case (which can't happen? yet?) we're still
effectively bitcasting, I think.  So this change adds a way to assert
that that's safe.

Note also, for future reference, that LLVM's instcombine pass will turn
a bitcast into a GEP(0, 0, ...) if possible.
Convert const ADT construction to trans::adt.

Also fixes ICE on struct-like variants as consts, and provides a slightly
less bad ICE for functional-update-like struct expressions in consts.
Test for struct-like variants in consts
Make functional-update struct consts not an ICE
Convert const field extraction to trans::adt