hold spinlock across context switch.
use iret to restore eflags on context switch.
set up new stack with correct iret frame.
assert cli is been called before unlocking spinlock
tweak scheduler_yield lock across context switch. still not sure it's
right.
make context switch a little clearer