Background
Right now we're using an associative list to store the global environment. Instead, we should be using hash tables. We'll need a beefier mechanism for storing environments to accomodate fn and let* - we'll need semantics for merging scopes right to left in order to shadow.