myrialang: push apply into apply, projectingjoin

more to do
myrialang: RemoveUnusedColumns

Some operators, like GroupBy and Join construct completely new tuples
after concluding their operation. In some cases neither the operator nor
the output it produces actually need all the columns:

T has schema x:int, y:int.
Query is "select x, COUNT(*) from T;" -- note that y is not used

For these cases, insert an Apply beforehand that drops any unused
columns.

Note that RemoveUnusedColumns and PushApply play off each other. In
practice, we should probably wait for convergence. However, here we just
run each operator twice, followed by a PushApply to round it out.
myrialang: style cleanups