### 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/src/main/java/org/elasticsearch/xpack/esql/optimizer/LogicalPlanOptimizer.java
if (plan instanceof Aggregate agg && agg.groupings().isEmpty()) {
                    p = skipPlan(plan, aggsFromEmpty(agg.aggregates()));
                } else {
                    p = skipPlan(plan);
                }
            }
            return p;
        }
        private static LocalSupplier aggsFromEmpty(List<? extends NamedExpression> aggs) {
            var result = new ArrayList<>(aggs.size());
            for (var agg : aggs) {
                
                if (agg instanceof Alias a && a.child() instanceof AggregateFunction aggFunc) {
                    result.add(aggFunc instanceof Count ? 0L : null);
                } else {
                    throw new EsqlIllegalArgumentException("Did not expect a non-aliased aggregation {}", agg);
                }
            }
            var blocks = BlockUtils.fromListRow(BlockFactory.getNonBreakingInstance(), result);
            return LocalSupplier.of(blocks);
        }
    }
    private static LogicalPlan skipPlan(UnaryPlan plan) {
        return new LocalRelation(plan.source(), plan.output(), LocalSupplier.EMPTY);
    }
    private static LogicalPlan skipPlan(UnaryPlan plan, LocalSupplier supplier) {
        return new LocalRelation(plan.source(), plan.output(), supplier);
    }
    protected static class PushDownAndCombineFilters extends OptimizerRules.OptimizerRule<Filter> {