syntax/ast_util: add `is_by_value_unop()`
Tell typeck that user unops are by value
Tell trans that user unops are by value
Tell expr_use_visitor that user unops are by value
Tell regionck that user unops are by value
libcore: convert unop traits to by value
libstd: convert `BitFlags` unops to by value
libstd: convert `Duration` unops to by value
Fix run pass tests
Test unop move semantics
Address Niko's comments
auto merge of #19899 : japaric/rust/unops-by-value, r=nikomatsakis

- The following operator traits now take their argument by value: `Neg`, `Not`. This breaks all existing implementations of these traits.

- The unary operation `OP a` now "desugars" to `OpTrait::op_method(a)` and consumes its argument.

[breaking-change]

---

r? @nikomatsakis This PR is very similar to the binops-by-value PR
cc @aturon
libs: merge librustrt into libstd

This commit merges the `rustrt` crate into `std`, undoing part of the
facade. This merger continues the paring down of the runtime system.

Code relying on the public API of `rustrt` will break; some of this API
is now available through `std::rt`, but is likely to change and/or be
removed very soon.

[breaking-change]
Refactor std::os to use sys::os
Allow args to work without rt initialization
Make at_exit initialize lazily
Remove rt::bookkeeping

This commit removes the runtime bookkeeping previously used to ensure
that all Rust tasks were joined before the runtime was shut down.

This functionality will be replaced by an RAII style `Thread` API, that
will also offer a detached mode.

Since this changes the semantics of shutdown, it is a:

[breaking-change]
Introduce std::thread

Also removes:

* `std::task`
* `std::rt::task`
* `std::rt::thread`

Notes for the new API are in a follow-up commit.

Closes #18000
Remove rt::{local, local_data, thread_local_storage}
Add blocking support module for channels