Fix let to make recursive functions possible

![](http://i.imgur.com/BMgNSsj.gif)![](http://i.imgur.com/BMgNSsj.gif)<br>![](http://i.imgur.com/BMgNSsj.gif)![](http://i.imgur.com/BMgNSsj.gif)
Because we have to explicitly pass a *new* environment in let now, rather than using `$eval`, there's no real reason for `$eval` to capture our environment by-reference any more, except performance (avoids a copy). Oh well.