Make variables lexically scoped.

Variables in Minilisp were dynamically scoped. This commit changes the handling
of variable resoltion so that variables are resolved based on lexical position.

Two major things has been done in this commit for lexical scoping:

 - Move the environment frame from the C stack to GC-managed heap. When created,
   a closure has a pointer to the current top environment frame, and the
   pointer needed to be valid after the C function that created the closure
   returned.

 - Add "env" field to the function object. The field points to the top
   environment frame at the time when the closure is created.
Avoid string comparison when searching for a variable.

The reader "intern"s each symbol, so there's only one unique symbol for
the same name. Thus pointer comparison suffices.