Function inlining pass, and lots of infrastructure to support it:

- Function inlining pass clones function bodies to local expression
  blocks at each call site, wires up function args with local
  let-statements within the blocks, and desugars return statements via a
  return-value temp and a 'break' in a labeled-while to jump to the
  return point. (Codegen will have to understand labeled loops but this
  is still easier to do than supporting general gotos: it avoids
  irreducible CFGs.)

- AST definition update: added (i) block expressions, or expressions
  whose values are computed by a block of statements, returning the last
  statement's value; (ii) expression statements, to support this
  value-return; and (iii) true return statements for function bodies.
  Block expressions and expression statements are not supported at
  parse-time, and are meant only to be generated by transforms.

- Visitor framework updates. Each modify function can swap out its node
  for another node, but cannot modify the AST outside of its own
  subtree.

- Test program update: added a few more interesting calls, including a
  nested call.