Support let.

Let statements are written like (let (label value..) body..). They can be implemented as macros with nested lambdas. We implement them natively because for cases like (let (a 2 b (f a) c b) ...) 3 nested lambdas seem like an overkill, and we can generate more efficient bytecode.