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.

Review?/CC: @dawgfoto, @klickverbot, @ibuclaw