Refinements to error system

Changes:
- Moved EvalError into its own file
- EvalErrors can report name separately from description
- Removed CustomError and DefineFunctionError
- Added new errors to replace CustomError and DefineFunctionError
- Fixed some improper descriptions
- Slightly changed formatting for how REPL and interpreter display errors