Caching (fixes #31), rewrite yolo in yolisp (fixes #27)

![](http://mylittlefacewhen.com/media/f/img/mlfw3330-1330548352244.gif)
Takes environment by-reference so if it's modified, it'll use the modified one.

That's important so stuff like `(let ((a 2) (b (+ a 2))) b)` works