core: `sched_switch()` switch if not on runqueue

Fixes #1935.

`sched_switch()` should not only switch if the other priority is higher,
but also if the current thread was moved from the runqueue.

This PR is part of #1939.
I added `@ref` for `sched_context_switch_request`, function names with empty parens are automatically linked.