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)