### 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
case LONG -> LONG;
                case DOUBLE -> DOUBLE;
                case NULL -> NULL;
                case BYTES_REF -> KEYWORD;
                case BOOLEAN -> BOOLEAN;
                case DOC -> throw new IllegalArgumentException("can't assert on doc blocks");
                case UNKNOWN -> throw new IllegalArgumentException("Unknown block types cannot be handled");
            };
        }
        Object convert(String value) {
            if (value == null) {
                return null;
            }
            return converter.apply(value);
        }
        Class<?> clazz() {
            return clazz;
        }
        public Comparator<Object> comparator() {
            return comparator;
        }
    }
    record ActualResults(
        List<String> columnNames,
        List<Type> columnTypes,
        List<String> dataTypes,
        List<Page> pages,
        Map<String, List<String>> responseHeaders
    ) {
        Iterator<Iterator<Object>> values() {