### 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
public String qualifiedName() {
        return qualifier == null ? name() : qualifier + "." + name();
    }
    @Override
    public Nullability nullable() {
        return child.nullable();
    }
    @Override
    public DataType dataType() {
        return child.dataType();
    }
    @Override
    public Attribute toAttribute() {
        if (lazyAttribute == null) {
            lazyAttribute = resolved()
                ? new ReferenceAttribute(source(), name(), dataType(), qualifier, nullable(), id(), synthetic())
                : new UnresolvedAttribute(source(), name(), qualifier);
        }
        return lazyAttribute;
    }
    @Override
    public String toString() {
        return child + " AS " + name() + "#" + id();
    }
    @Override
    public String nodeString() {
        return child.nodeString() + " AS " + name();
    }
}