ast cleanup and new crossover operation

  AST used to hold a pointer to an immutable `base' genome and apply all
  edits every time a current genome was requested.  Now each AST
  instance will hold a mutable genome, and apply edits to the genome as
  they are applied to the AST object.

  Commensurate switch from a patch-based crossover operator to
  traditional single-point crossover.