Now we always use the stack instead of keeping a TOS register.
This is very inefficient, but I'll worry about register
allocation later.
The new block model is inspired by x86's `enter` and `leave`
instructions. I intend to support nested procedures at some point
in the future.