ctxsw: Save/restore all 15 (non-sp) registers.

r12 (aka. ip) got left out.

I also added some documentation along the way.
Handle IRQs in system mode.

This IRQ routine switches into system mode so that ISRs can share the
same banked registers with user programs. This is especially important
for ctxsw(), wich needs to manipulate SP_usr.

I'm now able to run the clockTest(), amongst a few others, rapidly
without crashing.

Unfortunately, it looks like the timesliceThreadTest() no longer works
with this change. I'll have to resolve that before merging this branch
in.
Pass new process' their arguments according to the APCS

We can now pass more than four arguments to a function. Yay!
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.
Load ctxsw()'s arguments from registers, not stack

The calling conventions don't put the first 4 registers on the stack.
Before, we were just getting lucky that resched() happened to be putting
the arguments at [sp, #8] and [sp, #12] as well as r0 and r1.
Save the SPSR with the other context for IRQs

We need to save the SPSR when entering an interrupt, in case the active
process changes as a result of servicing the interrupt. Without this
change, some per-process status information, such as the result of the
last comparison is corrupted.
Clarify a comment in the IRQ_Routine