librustc: Don't reuse same alloca for match on struct/tuple field which we reassign to in match body.
Implement BitOps for TreeSet
rustc: check supertraits for object safety

Closes #18959

Technically, this causes code that once compiled to no longer compile, but
that code probably never ran.

[breaking-change]
libcollections: remove unnecessary `as_slice()` calls
liballoc: remove unnecessary `as_slice()` calls
libcoretest: remove unnecessary `as_slice()` calls
libflate: remove unnecessary `as_slice()` calls
libfmt_macros: remove unnecessary `as_slice()` calls
libgetops: remove unnecessary `as_slice()` calls
libgraphviz: remove unnecessary `as_slice()` calls
liblog: remove unnecessary `as_slice` calls
libregex: remove unnecessary `as_slice` calls
libregex_macros: remove unnecessary `as_slice` calls
librustc: remove unnecessary `as_slice()` calls
librustc_back: remove unnecessary `as_slice()` calls
librustc_trans: remove unnecessary `as_slice` calls
librustdoc: remove unnecessary `as_slice()` calls
libserialize: remove unnecessary `as_slice()` calls
libstd: remove unnecessary `as_slice()` calls
libsyntax: remove unnecessary `as_slice()` calls