List comprehensions and let update

* merge with master/HEAD
* refactor slightly to match @tim-carper's refactoring of expr.cc
* disable reassignment in let() (can be added later, but not removed)
* tests for let and list comprehensions (#792)


TODO:
- [ ] Final validation of syntax and semantics
- [x] let() test cases
- [x] list comprehension test cases
- [ ] wikibooks documentation
- [ ] cheat sheet
- [ ] add one or more examples demoing this