core::rt: Restructure task_from_last_cleanup_job to borrow correctly

We need a number of mutable references to contexts so name it
`get_contexts` and return a tuple of all of them.
core::rt: Rename block_running_task_and_then to deschedul_...
core::rt: Insert calls to run_cleanup_tasks after all context switches
core::rt: Schedulers only need a single cleanup_job at a time

Each context switch has up to one cleanup job and it is always
executed immediately after the context switch.
core::rt: All context switches are followed by a cleanup action
core::rt: Clean up the thread-local scheduler code

Remove the ThreadLocalScheduler type in favor of functions.
Move everything into the sched::local module.
core::rt: Fix two incorrect uses of the thread-local scheduler

These would not be threadsafe
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
core::rt: Clean up some more hacks
Merge remote-tracking branch 'brson/sched-cleanup'

Conflicts:
	src/libcore/rt/sched/mod.rs
auto merge of #5909 : brson/rust/rt4, r=graydon

This is just a bunch of minor changes and simplifications to the structure of core::rt. It makes ownership of the ~Scheduler more strict (though it is still mutably aliased sometimes), turns the scheduler cleanup_jobs vector into just a single job, shunts the thread-local scheduler code off to its own file.