Eval: split Eval up into several type-specific methods

This is a pretty big change, and is quite likely to conflict with any other work. I will be happy to rewrite this branch to resolve any conflicts that appear.

This is the result of splitting Eval into type-specific methods. (While converting this I noticed several things which had a return Eval(...), which now correctly do the appropriate tail-recursion-optimizing thing.

I'm not quite sure where some of this code should live, I suspect we will need to rearrange our file structure relatively soon, but for now, the SexpPair-evaluating chunk is in sexp.go

Let me know if you'd like me to fix anything here before merging. It does pass the test cases.