Implement defplan rewriting

In order to make execution time node-values behave like clojure locals and vars,
we rewrite defplan forms written with normal clojure into a form using pallet's
functions for handling node-values, and control flow based on node-values.
Factor out generic AST transform code

Split the non-pallet specific transform code into a pallet.core.transform.ast.