code: NodeSchema copyAndReplaceWithTVE() {
          NodeSchema copy = new NodeSchema();
          int colIndex = 0;
          for (SchemaColumn column : m_columns) {
              copy.addColumn(column.copyAndReplaceWithTVE(colIndex));
              ++colIndex;
          }
          return copy;
      }
docs: Returns a copy of this NodeSchema but with all non-TVE expressions
  replaced with an appropriate TVE.  This is used primarily when generating
  a node's output schema based on its childrens' schema; we want to
  carry the columns across but leave any non-TVE expressions behind.