[GC] More and more roots
[GC] More and more roots

Some really tight code creates values that are vulnerable to getting
lost if a GC takes place, so the expressions have to be redone in
SSA fashion so that the temporaries can be GC roots.

This would be slightly less the case if doing car or cdr were not
creating fresh strings.

There is a mystery crash which could be a bug in this or in alloc.cpp.
Since things seem otherwise perfect, fixing that is next.

Previously the program would crash before computing the first (fact 12)
in the driver script. Now it starts on the second one.

cardiffman/alloc