Handle unit-like types specially, and factor out cast-to-int.
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
Renovate cast-to-int