Proper handling of macro params, REPL improvements

Changes:
- Redesigned code to allow macros to properly treat their arguments as literal values and not evaluate them
- Fixed a bug where evaluating a macro returned the macroexpansion instead of the result of evaluating the macro expansion
- Added a logging manager to allow various types of developer information to be logged to console
- Moved REPL commands code into its own file
- REPL commands code enhanced to allow REPL commands to be called with arguments
- Moved operators into their own file
- Moved SingleFn into its own file
- Minor changes to internal APIs