Make fixRowNumberOrdering work on typed trees

- Type information is correctly propagated through fixRowNumberOrdering
- Move assignTypes phase up before fixRowNumberOrdering
- Make the zip join tests a method on JoinTest (where they belong)
Bug fix: Reuse SymbolNamer when copying the CompilerState
Make fuseComprehensions work on typed trees

- Type information is correctly propagated through fuseComprehensions

- Move assignTypes phase up before fuseComprehensions

- Don't routinely copy types when rebuilding ProductNodes and
  StructNodes. We still do it for Select which is dubious but keeps
  things simple for now. When more phases are typed and the earlier ones
  propagate type information selectively where needed, this should not be
  necessary anymore.
Remove an unnecessary createSelect() call in comprehension fusion.

The only time that the select clause of this comprehension matters is in
narrowStructure() which should be able to find the right target either way.
Bug fix: Memoize on the target node instead of the ref in localizeRefs.

Using a Transformer did the memoization on the RefNode but there can be
different kinds of RefNodes for the same target and these should result in
the same AnonSymbol, so we now memoize the mapping from an IntrinsicSymbol
to an AnonSymbol.

Also beefing up and simplifying the memoizer.