### 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/ql/src/main/java/org/elasticsearch/xpack/ql/expression/Alias.java
*/
    private Attribute lazyAttribute;
    public Alias(Source source, String name, Expression child) {
        this(source, name, null, child, null);
    }
    public Alias(Source source, String name, String qualifier, Expression child) {
        this(source, name, qualifier, child, null);
    }
    public Alias(Source source, String name, String qualifier, Expression child, NameId id) {
        this(source, name, qualifier, child, id, false);
    }
    public Alias(Source source, String name, String qualifier, Expression child, NameId id, boolean synthetic) {
        super(source, name, singletonList(child), id, synthetic);
        this.child = child;
        this.qualifier = qualifier;
    }
    @Override
    protected NodeInfo<Alias> info() {
        return NodeInfo.create(this, Alias::new, name(), qualifier, child, id(), synthetic());
    }
    @Override
    public Expression replaceChildren(List<Expression> newChildren) {
        return new Alias(source(), name(), qualifier, newChildren.get(0), id(), synthetic());
    }
    public Expression child() {
        return child;
    }
    public String qualifier() {
        return qualifier;
    }