### 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
mvCompressedEntries.add(entry.substring(1, entry.length() - 1));
                    } else {
                        mvCompressedEntries.add("");
                    }
                } else {
                    mvValue = new StringBuilder();
                    previousMvValue = entry.substring(1);
                    mvValue.append(previousMvValue);
                }
            } else if (entry.endsWith("]")) {
                if (previousMvValue == null) {
                    throw new IllegalArgumentException(
                        format(
                            "Error line [{}:{}]: Unexpected end of a multi-value field value (no previous starting point); found [{}]",
                            lineNumber,
                            pos,
                            entry
                        )
                    );
                }
                mvValue.append("," + entry.substring(0, entry.length() - 1));
                mvCompressedEntries.add(mvValue.toString());
                mvValue = null;
                previousMvValue = null;
            } else {
                if (mvValue != null) {
                    if (entry.length() == 0) {
                        throw new IllegalArgumentException(
                            format(
                                "Error line [{}:{}]: Unexpected missing value in a multi-value column; found [{}]",