start throwing errors during static analysis: use of a keyword as a function or variable name
throw errors if a name has been defined before in the program, OR if it's part of the base environment
throw errors if a function name has been defined before in the program, OR if it's part of the base environment. Also perform unique ID checks on a lambda's arguments