Access to location expression operations is via "elem", not "child"

- Let's keep child reserved for parent/child iteration in DIE tree.
Implement relem for location expressions

- To complement elem, for symmetry with sequences.
Annotate purpose of namespace blocks in builtin-dw.cc
Add ?OP_*, !OP_*
Introduce binding blocks and let forms

- let A B ... := EXPR ;

  EXPR is evaluated in sub-expression context, values near TOS are
  popped and bound to the identifiers.

- [|A B ...| EXPR]

  Parametrized capture.  This is a syntax that allows capture
  splicing, whose implementation has been so far unsatisfactory.  This
  latest attempt mentions a binding block akin to SmallTalk and Ruby.
  The capture pops values near TOS, binds them to the identifiers, and
  then proceeds to evaluate EXPR in sub-expression context as usual.

  To replace value on TOS with its children, one says: [|D| D child].
  That's somewhat better than the old ->D; [D child], in that it
  doesn't litter the namespace.  The let form doesn't even allow
  writing this easily, due to the sub-expression evaluation.

- In the future, we should similarly have {|A B ...| EXPR} for blocks.
  This will take care of the problem with precedence of ->, which
  didn't play well with alternation (and tweaking it just meant that
  other alternation uses had it wrong).
Implement ID block in function blocks

- Replace most uses of -> in test suite with the new syntax.  Some
  can't be, it's probably buggy.