Some tweaks to register saving in callWithStackShell().

This makes it so that registers are saved to a global variable
instead of on the stack (with non-GDC compilers). This has a few
advantages:

* Most importantly: It makes no assumption about stack layout (so
  the code will work fine with e.g. LLVM and not overwrite GPRs
  accidentally).
* No architecture-specific cleanup code has to be written (i.e.
  no popad and the likes). We just zero out the machineRegisters
  variable.
* Porting is slightly easier now since all that has to be done is
  write a bunch of fields and some assembly that moves registers
  to those fields in the machineRegisters variable.