Add support for variable assignment and lookup

Currently we just have a single scope dictionary that gets passed around
everywhere, but eventually the plan is to have a stack of scopes, or
something like that.
Add test for NameErrors, fix test

A test expecting TypeError was erroneously passing because it was
calling a function with the wrong number of args, which was also a
TypeError.
Add support for if statements