extra: Reimplement Sem on top of the new Mutex
Remove deferred sends from channels

This also removes the extra "can_resched" argument to the reawaken runtime
function.
Touch up the mutex implementation

This fixes a few bugs, adds some comments, reformats code, and gets it working
with AtomicU64.