core::rt: Move thread-local scheduler to its own module
core::rt: A little bit of cleanup to thread-local scheduler
core::rt: Rename Scheduler::local to Scheduler::unsafe_local
core::rt: Make Scheduler::unsafe_local return a fabricated region pointer

Instead of taking a closure. It's unsafe either way. Rename it to unsafe_local_borrow.
core::rt: Restructure context switches to take ownership of the Scheduler

In order to do a context switch you have to give up ownership of the scheduler,
effectively passing it to the next execution context. This could help avoid
some situations here tasks retain unsafe pointers to schedulers between context
switches, across which they may have changed threads.

There are still a number of uses of unsafe scheduler pointers.
core::rt: Narrow down the unsafety of the thread-local scheduler

Only when borrowing the I/O implementation do we need unsafety