[GC] Bug fixes and interned symbols.

alloc.cpp/alloc.h:
Removed "TYPE" from names of types.
Added BOXSTR_SYMBOL, an interned string. If a string and symbol are
compared they are compared character for character. This may change.
A Rooter object allows clients to use RAII to define a GC root that
expires when it goes out of scope.

alloc.cpp:
Added an experimental LOG template which is a variadic function
template. Replaced a subset of cout << foo expressions with LOG calls.
In string_append_char and array_append_element, the logic for checking
whether the collection could be appended to without moving it and other
situations was not complete, so arrays could end up extended past the
end of heap.
Forwarding wasn't completely carried out and so items that were
referenced by multiple roots were ending up duplicated.
[LISP] Using symbols and array for env.

Changed the names of the cryptically named functions.
Converted the environment from an STL array of STL pairs to LISP
array of cons pairs. The CAR is a symbol and the CDR is either a
built-in function or an s-expression defining a user's function.
Modified the read_obj routine to return symbols when appropriate.
Added test usage to make it easier to test with GDB.
[LISP] Easier testing

Added test usage to make it easier to test with GDB.
[GC] Much less logging

Conditionally replace the variadic template function with a variadic
macro that does nothing, in order to eliminate logging for now.
Also converted most remaining logging to use said LOG system.
[LOG] Less logging