3230 - bugfix: extending mutation macros

To support push! and pop! on stacks we need to inspect the type of the
argument in the :case. But mac :case has access only to arg names, not
values.

I considered extending mac in generic.wart so that extending push!
expands to:

  let $super push!
    mac! (push! ... (| $params (x s)))
      `(if `(isa stack ,s)
         (do ..)
         (,$super ,@$params))

rather than:

  let $super push!
    mac! (push! ... (| $params (x s)))
      if (isa stack s)
       (do ..)
       `(,$super ,@$params))

It would mean putting up with some syntactic weirdness. Macro :cases and
bodies would have to drop the initial backquote that's automatically
added to them.

However there's a bigger problem: we can't backquote the entire
condition because we lose the ability to first operate on the names.
What would this expand to?

  mac (mac (name ... params) ... body) :case (mem? literal? params)
    withs (bqvars   literal.params
           bindings attach_gensyms.bqvars)
      `(..)

So we are forced to explicitly eval the :case arg, by introducing a
separate case for values called :qcase.

The final wrinkle: Gaining access to caller_scope inside the macro body
is non-trivial because of all the intervening scopes in:

  (eval ((fn() ,@body)) ...)

Hence the new macro_caller_scope. I'm still not convinced that isn't a
hack, partly because I still don't understand the details of why the
above phrasing causes exactly two extra levels of caller_scope. I do
know that one is caused by eval, and one by the ((fn() ..)). But this
bears further digging.
3231 - support assigning to (rep ..) forms