### Description

In cases where the same agg is used, instead of computing it multiple times, make another reference to it:
```
stats a = min(x), b = min(x) by z
```

should become
```
stats a = min(x) by z
eval b = a
keep a,b,z
```

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/LogicalPlanOptimizer.java
}
            return p;
        }
        private static LocalSupplier aggsFromEmpty(List<? extends NamedExpression> aggs) {
            Block[] blocks = new Block[aggs.size()];
            var blockFactory = BlockFactory.getNonBreakingInstance();
            int i = 0;
            for (var agg : aggs) {
                
                if (agg instanceof Alias a && a.child() instanceof AggregateFunction aggFunc) {
                    
                    Object value = aggFunc instanceof Count count && (count.foldable() == false || count.fold() != null) ? 0L : null;
                    var wrapper = BlockUtils.wrapperFor(blockFactory, LocalExecutionPlanner.toElementType(aggFunc.dataType()), 1);
                    wrapper.accept(value);
                    blocks[i++] = wrapper.builder().build();
                    BlockUtils.constantBlock(blockFactory, value, 1);
                } else {
                    throw new EsqlIllegalArgumentException("Did not expect a non-aliased aggregation {}", agg);
                }
            }
            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> {