Trim fields by default.

We do not currently trim fields if there are more than 3 joins, because the additional projects seem to prevent PushJoinThroughJoinRule from firing correctly.

Fixes https://github.com/julianhyde/optiq/issues/70, "Joins seem to be very expensive in memory".
To take advantage of asymmetric hash join added recently in linq4j, tweak cost of EnumerableJoinRel so that join is cheaper if the larger input is on the left, and more expensive if it is a cartesian product.

Fix a bug in VolcanoCost.

Add class FoodMartQuerySet, that contains the 6,700 foodmart queries.
Disable some troublesome tests.
When an internal record has 0 fields, rather than generating a synthetic class and lots of instances that are all the same, use the new Unit class, which is a singleton.
If EnumerableAggregateRel has no aggregate functions, generate a call to Enumerable.distinct(), thereby saving the effort of building trivial accumulators.
Rework HepProgramBuilder into a fluent API.
Fix https://github.com/julianhyde/optiq/issues/97, correlated EXISTS. Add test cases for join-ordering optimization.