compiler: syntax for calling super constructor from primary/default
compiler: support constant definitions with `let`

- `let` can be used instead of `var` in variable definitions in any scope.
- `let` definitions must have a defining expression.
- Variables defined using `let` cannot be assigned later.
compiler: parameters and other variables are constant by default

- Parameters can now be defined with `var`. If they aren't, they will
  be constant.
- Variables defined in other patterns (not parameters or variable
  definitions, e.g., partial function cases) are now constant.