Adding 'apply' built-in, fixing '+' behavior

Changes:
- Added 'apply' built-in function, which takes a sequence of arguments and calls a function with the sequence's members as the arguments
- Built-in functions now must take the evaluation environment as an argument
- Changed the behavior of the '+' built-in function to return 0 if called with no arguments
- Several built-in functions now check isEmpty rather than pattern-matching on the value of a list
- Macro argument purge no longer happens when a macro returns an empty list