compiler: Macro support rewrite

- Allow structured repeating templates. Previously a repeated template
  could only be a single variable. Now templates such as "(define var
  init) ..." are allowed.

- Match symbols on their binding instead of the their scope. This means
  identical bindings in different scopes will now be treated identical

- Support vector templates

- Check for duplicate pattern variables at syntax define time

- Support for custom ellipsis identifiers as specified in R7RS
stdlib: Support let*

This uses macro and test directly from R7RS. This depends on the macro
support rewrite