Added special Join classes for the algebra tree.

Modified existing optimization structure so that we could get multiple permutations of relation ordering for join as well as multiple permutations for changing joins to special types of join.