Improving how built-in functions are handled

Changes:
- Built-in functions are no longer registered as symbols in the context
- Built-in functions are now represented by an enum, like reader forms
- Built-in functions are prefixed by '.', since their names are now reserved
- The standard library now contains aliases for built-in functions that have the familiar names
- Math built-in functions now only take two arguments; stdlib code is responsible for handling all other cases
- 'apply' is now a special form rather than a built-in function
- Fixed some bugs with 'apply' when used with certain inputs (e.g. user-defined functions)
- LambdatronBuiltIn typealias no longer contains an EvalEnvironment term
- Added 'bootstrap' file for temporary built-ins that are required to fill in for currently missing functionality