Fixed the combine routine to hold the result before dropping the operands, and
added a test for it.

Changed the resolve routine to make it responsible for holding and dropping f.
I did this because I could create a case where the symbol x went on the free
list before calling context on it.  By holding f itself, the symbol x is
guaranteed to stay live because it's a child of f.  Also, the resolve routine
can now call "abstract" directly instead of "lam".

Changed the erase routine in the build script so that it stops when the first
rmdir fails.  The old behavior of going all the way up the path was harmless,
but the new behavior is more efficient and also makes the code smaller.