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 like the generally improved documentation, it would be even better if you put in `@ref`s.