Fix sending on channels from off the runtime

The fairness yield mistakenly called `Local::take()` which meant that it would
only work if a local task was available. In theory sending on a channel requires
no runtime (because it never blocks), so there's no reason it shouldn't support
such a use case.

Close #12391