anchor.diff:  
   - `def', for lexical variables (as with `letrec')
   - `defun', for local functions (as with `labels')
  -- `defmacro', for local macros (as with `defmacro')
   - `defalias', to bind values in the function namespace (like `fbindrec*')
   - `declaim', to make declarations (as with `declare')
  +- `defconstant' and `defconst', which behave exactly like symbol macros
  +
  +Also, with some restrictions, you can use:
  +
  +- `defmacro', for local macros (as with `defmacro')
   - `define-symbol-macro', to bind symbol macros (as with `symbol-macrolet')
  -- `defconstant' and `defconst', which behave exactly like symbol macros
   
   \(Note that the top-level definition forms defined by Common Lisp
   are (necessarily) supplemented by two from Serapeum: `def' and
  
positive.code:       (adder 2))
      => 4
  
  \(At the moment this does *not* work for macros.\)
  
  The value returned by the `local` form is that of the last form in
  BODY. Note that definitions have return values in `local' just like
  
negative.code:         (let* ((body (expand-top body))
                 (fn-names (mapcar (lambda (x) `(function ,(car x))) labels))
                 (var-names (append (mapcar #'car hoisted-vars) vars)))
            (when (null exprs)
              (warn "No expressions in `local' form"))
            (multiple-value-bind (var-decls decls)
                (partition-declarations var-names decls)
              (multiple-value-bind (fn-decls decls)
  