runtime: Fix continuations on x86

Continuation::capture() compiled at -O0 was choking when attempting to
return a structure to the caller. It appears that it was creating a
temporary structure on the stack before returning it in EAX/EDX. At
higher level optimisation levels this would have been optimised to
direct stores to EAX/EDX. I'm not sure why the allocation failed but
it's being performed on an essentially undefined stack so this isn't
surprising.

Instead have Continuation::capture() always return itself and have the
caller check ->passedValue() itself to determine if its in a capture or
resume return. This avoids the problematic stack allocation and is
actually cleaner.
runtime: More efficient stack pointer calc

We don't need a separate canary value to determine the stack pointer -
we can use the stack pointer variable itself. This saves 4 bytes on the
stack of the capture and resume paths