Add support for generating classes through a MacroClass block
   * instead of using def ast = macro { class A {} }, use def ast=new MacroClass() { class A{} }
   * substitutions broken due to incorrect scoping of the closure expression representing the substitution