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`

This commit completely changes the thread model (threads are detached by
default) and API (including park/unpark for blocking). It is a:

[breaking-change]

Closes #18000
Remove rt::{local, local_data, thread_local_storage}
Add blocking support module for channels
Remove rt::{mutex, exclusive}
Revise rt::unwind
Fallout from new thread API
Disable capture_stderr test for now
Fix the capture_stderr test

There's always a fun time having two sets of standard libraries when testing!
Fix compilation on linux
Tweak the startup routine to pass on linux

We need to be sure to init thread_info before we init args for example because
args is grabbing locks which may entail looking at the local thread eventually.
Avoid .take().unwrap() with FnOnce closures
Update doc comment for std::rt
Revise std::thread API to join by default

Adds explicit detachment, and also renames `thread::Cfg` to
`thread::Builder`.

Includes a variety of other fixes after rebasing over proc removal.
std: Lower abstractions for thread_local/at_exit

The current implementations use `std::sync` primitives, but these primitives
currently end up relying on `thread_info` and a local `Thread` being available
(mainly for checking the panicking flag).

To get around this, this commit lowers the abstractions used by the windows
thread_local implementation as well as the at_exit_imp module. Both of these
modules now use a `sys::Mutex` and a `static mut` and manage the
allocation/locking manually.
std: Move the panic flag to its own thread local

This flag is somewhat tied to the `unwind` module rather than the `thread_info`
module, so this commit moves it into that module as well as allowing the same OS
thread to call `unwind::try` multiple times. Previously once a thread panicked
its panic flag was never reset, even after exiting the panic handler.