### Description

Evals that introduce aliased can be simplified by extracting them into a project (and thus signaling there's no underlying processing).

The following eval:
`eval x = a + 1, y = x, z = y + 1, y = z, w = y + 1`
can be converted into:
`eval x = a + 1, z = a + 1 + 1, w = a + 1 + 1 | project x, z, z as y, w`

This helps fuse the project with other projections/aggs downstream.
x-pack/plugin/esql/qa/testFixtures/src/main/java/org/elasticsearch/xpack/esql/CsvTestUtils.java
return EsqlQueryResponse.pagesToValues(dataTypes(), pages);
        }
    }
    public static void logMetaData(List<String> actualColumnNames, List<Type> actualColumnTypes, Logger logger) {
        
        StringBuilder sb = new StringBuilder();
        StringBuilder column = new StringBuilder();
        for (int i = 0; i < actualColumnNames.size(); i++) {
            if (i > 0) {
                sb.append(" | ");
            }
            column.setLength(0);
            column.append(actualColumnNames.get(i));
            column.append("(");
            column.append(actualColumnTypes.get(i));
            column.append(")");
            sb.append(trimOrPad(column));
        }
        int l = sb.length();
        logger.info(sb.toString());
        sb.setLength(0);
        sb.append("-".repeat(Math.max(0, l)));
        logger.info(sb.toString());
    }
    static void logData(Iterator<Iterator<Object>> values, Logger logger) {
        while (values.hasNext()) {
            var val = values.next();
            logger.info(rowAsString(val));
        }
    }