Refactor AST.clone() to not recursively call .clone() on children
Never directly point at things
Cycle proof AST.clone()
Allow if expressions and selects and fors in the middle of other lists