Expose the full stack to branches and functions

Previously an If branch or a function call simply evaluated a list and
put its return on the parent stack. Unfortunately that code inside the
list couldn't access any of the values of the parent stack because of
this.

Now the code inside the list is pushed to the parent stack and
evaluated, allowing full access to all values.