Macroclass cont'd

This PR refines the experimental `macroclass` feature we released with
0.6.0. The syntax has changed slightly, and auxillary bindings are a bit
more robust.

You declare `pattern`s like before, but instead of being rules
themselves, `pattern`s contain a `rule` declaration along with any
auxillary `with` bindings. I renamed `where` to `with` to mirror
`withSyntax`. `with` bindings support syntax quotes with `#{}` but can
also use syntax constructors like `makeValue` et al. Additionally,
`pattern`s with only a `rule` declaration can be collapsed into a single
`rule` to mirror identity rules.
Merge pull request #350 from natefaubion/macroclass2

Macroclass cont'd