An IRQ handler that doesn't corrupt the stack

e36420f50 implemented a change to IRQ_Routine which moved interrupt
processing to system mode. Unfortunately, along with the change, the
context was saved/restored from the IRQ stack instead of the user stack.
When handling an IRQ that involved switching the active process, the
rest of the system would set the new process up with the correct stack
and register values. However, because some context was saved on the IRQ
stack, which does not change when the user process changes, we restored
5 of the old process' registers onto the new process -- leading to
erradic behavior.

This change saves all of the required context (just the APCS registers)
onto the USER stack, so that when the active process changes we restore
registers from the new stack.