fix performance regression from invalid IR

Monomorphize's normalization results in a 2% decrease in non-optimized
code size for libstd, so there's a negligible cost to removing it. This
also fixes several visit glue bugs because normalize wasn't considering
the differences in visit glue between types.

Closes #8720
auto merge of #8724 : thestinger/rust/fix-transmute, r=graydon

Monomorphize's normalization results in a 2% decrease in non-optimized
code size for libstd, so there's a negligible cost to removing it. This
also fixes several visit glue bugs because normalize wasn't considering
the differences in visit glue between types.

Closes #8720
auto merge of #8705 : brson/rust/lesscxx, r=graydon
std: Reduce TLS access
Define cfg(rtopt) when optimizing. Turn off runtime sanity checks

Naturally, and sadly, turning off sanity checks in the runtime is
a noticable performance win. The particular test I'm running goes from
~1.5 s to ~1.3s.

Sanity checks are turned *on* when not optimizing, or when cfg
includes `rtdebug` or `rtassert`.
std: Convert some assert!s to rtassert!
std: More TLS micro-optimization
std::rt: Optimize TLS use in change_task_context
std::rt: Remove extra boxes from MessageQueue and SleeperList
std::rt: Reduce SleeperList contention

This makes the lock much less contended. In the test I'm running the
number of times it's contended goes from ~100000 down to ~1000.
std::rt: Reduce MessageQueue contention

It's not a huge win but it does reduce the amount of time spent
contesting the message queue when the schedulers are under load
std::rt: Remove metrics for perf

These aren't used for anything at the moment and cause some TLS hits
on some perf-critical code paths. Will need to put better thought into
it in the future.
std: Convert the runtime TLS key to a Rust global to avoid FFI
std::rt: Remove an unnecessary allocation from the main sched loop
std: Make vec::push_all_move call reserve_at_least

vec::unshift uses this to add elements, scheduler queues use unshift,
and this was causing a lot of reallocation
std::rt: Enforce sanity a while longer

I'm not comfortable turning off rtassert! yet
Whitespace