Save all registers on context switch to prepare for interrupts
Sets up a macro to distinguish between interrupts and syscall handler.
For interrupts, branch to irq_context_switch
from the exception vector. Set up the correct exception handler in this function as well.
Uses one additional variable on the stack to temporarily store value of x0 on returning from task.