Apply, macros, @ boxes, nicer repl

Adds support for evaluating `(foo bar)` expressions, and then uses this to move the built-ins to a new file (e.g. `do`, `def`, etc). 

To get them to work properly, this required implementing macros, essentially functions where the arguments aren't evaluated before they are called. Macros are indicated by an extra bool on `Lambda` and `Rust`.

It also adds some other builtins, like quasiquotation (`quasiquote` and `unquote`), and `print`.

Also, the last commit makes (almost) everything @-boxed, since I had to use a whole pile of clones to get apply to work with ~.

r? @bjz (feel free to merge/not merge/select certain commits.)