Projection of Join

We added a stronger test that did a Join, then a Projection.
This stressed both the computation system and the expr system, leading to the
following changes:

1.  Demonstrated how to use compute(..., dict) with non-Joins, see

    @dispatch(Projection, dict)

    in core

2.  SQLAlchemy compute dispatches on Selectable, not Table

3.  SQL Join uses select and unique to shrink down the columns so that
    they match the schema.

    Previously the column names were like

        table1.a, table1.b, table2.a, table2.c

    Now the column names are like

        a, b, c

4.  This also forced the ``unique`` contribution to utils in the last commit