Added information about the while block.
Fixed minor type errors in the parser.
Fixed a formatting error in the runner.
Added the ability of Files and Pipes to clone themselves.

This is in preparation for lexical scoping, since these object types will
have to be counted across function borders and in closures. This will make
it easier to keep track of these objects (vs manually incrementing the
reference counts).
Added lexical closures.

Removed the ugly frame hacks (push_fun_frame/pop_fun_frame) and generalized
push_frame and pop_frame to work with both types of frames. Importantly,
scopes are kept track entirely though the stack, and not a hybrid
stack-tree.

Also, function arguments are evaluated inside the outer scope when
functions are called (instead of the inner scope, like before) to allow for
true lexical closures, as well as functions creating new inner scopes to
avoid "leaking" function variables across the scopes.