For s2idle, we need a reliable way to force the scheduler into an idle loop. This adds IPIs we can send to specific CPU sets to idle or unidle them.
If I were 100% sure the CPUs wouldn't get any other kinds of IPIs during the s2idle loop, we could probably do away with the extra unidle IPI and just "kick" the CPUs with a preempt or something to clear their scheduler idle flags. But for now this guarantees things will work.
This is a bit heavy-handed and not necessarily the right approach - revision opened mostly so @olce can have a look :)