Large refactoring of joins and ExprArgs. Should be much more robust.