### 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
rowValues.add(listOfMvValues);
                    } else {
                        rowValues.add(columnTypes.get(i).convert(value));
                    }
                }
                values.add(rowValues);
            }
            return new ExpectedResults(columnNames, columnTypes, values);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    public enum Type {
        INTEGER(Integer::parseInt, Integer.class),
        LONG(Long::parseLong, Long.class),
        UNSIGNED_LONG(s -> asLongUnsigned(safeToUnsignedLong(s)), Long.class),
        DOUBLE(Double::parseDouble, Double.class),
        FLOAT(
            
            s -> (double) Float.parseFloat(s),
            Double.class
        ),
        HALF_FLOAT(
            s -> (double) HalfFloatPoint.sortableShortToHalfFloat(HalfFloatPoint.halfFloatToSortableShort(Float.parseFloat(s))),
            Double.class
        ),
        
        
        SCALED_FLOAT(s -> s == null ? null : scaledFloat(s, "100"), Double.class),
        KEYWORD(Object::toString, BytesRef.class),