Class function

Previously we used classes directly in computations, e.g.

    Join(a, b, 'col')

And constructors had logic.  Now Class constructors are dumb and we
rely on functions for this logic.

    join(a, b, 'col') -> Join(a, b, 'col', 'col')

This is useful for two reasons

1.  We don't have to return an object of the input type.  E.g. `selection(...)` doesn't have to return a `Selection` object.
2.  Because no evaluation logic happens in the constructor we can use our classes as pattern templates with wildcard matching variables.  This will be helpful for expression simplification via unification.