Add parser for `#[repr(...)]`; nothing uses it yet.

Also export enum attrs into metadata, and add a convenient interface for
obtaining the repr hint from either a local or remote definition.
Initial implementation of enum discrimnant sizing.
Lint non-FFI-safe enums.
Add repr attributes in various places that need them.
Check repr attribute consistency at check time, not translation.

Note that raising an error during trans doesn't stop the compile or cause
rustc to exit with a failure status, currently, so this is of more than
cosmetic importance.
Unbreak the debuginfo tests.

The variant used in debug-info/method-on-enum.rs had its layout changed
by the smaller discriminant, so that the `u32` no longer overlaps both
of the `u16`s, and thus the debugger is printing partially uninitialized
data when it prints the wrong variant.

Thus, the test runner is modified to accept wildcards (using a string
that should be unlikely to occur literally), to allow for this.
auto merge of #9006 : jld/rust/enum-discrim-size.for-feedback, r=cmr

This is the long-awaited branch to allow enum discriminants to be any integral type.  The default is the smallest one that can represent the possible values, but this can be overridden by an attribute, either to a specific type or to whatever the platform's C ABI would use.  The `ctypes` lint pass is extended to detect non-FFI-safe enums in foreign item types.

I've fixed the months of bit rot, and it passes `make check` on x86_64 Linux, and I've squashed it into a reasonably comprehensible form — but it definitely needs more tests, and I think some of the commit messages could stand to be more informative.  The former could be addressed in a followup PR, to reduce the possibility of further bit rot.