Restructuring expand

o Logical plan: Split between Expand, OptionalExpand, and VarExpand
o expand step: Plan simple expands that go into existing identifier using ExpandInto
o Update un-nesting of optional expand to properly preserve predicates
o Introduce new helper: Generator (for writing iterators as generation functions)