Improve TR lambda to accommodate type annotations

The new `lambda` form allows all combinations of arguments
with optional type annotations for all cases.
Allow TR `lambda` to have a result type annotation
Improve type-checker for optional arg functions
Incorporate PR feedback
Better error messages for TR lambda parsing
Add support for rest arguments in TR plain lambda

Two caveats:
  * in some positions : is not accepted as a formal
    when used in combination with * as a formal
  * the quality of parse error messages for rest
    argument types is traded for better optional argument
    error messages
Make :-less versions of `let` variants in TR
Add a :-less `do` for TR
Add :-less versions of `struct` macros
Support polymorphism in both TR let and lambda
Enable mixed type annotations for `define`
Accept polydots rest in TR lambda and define

Also accept type variables before formals in all cases
Provide :-less versions of all `for` forms.

Modify the forms as needed to accept non-annotated
bindings to match the untyped versions. Also fixes
bugs in syntax classes found along the way.
Revise TR Reference for new :-less forms