[OPTIQ-435] LoptOptimizeJoinRule incorrectly re-orders outer joins

Re-structure some code to use immutable lists rather than int arrays.

Parameterize Programs.heuristicJoinOrder to use a heuristic join only if there are at least a given number of joins.

Add "dependents" and "locations" tables to "hr" schema.