Refactored to use exceptions for error handling since adding variables/assignments will require everything to be in an IO monad
Added environment to main
Added eval for atoms and symbols
Added environment and define for variables