PHOENIX-71 Support sub-joins

Re-define JoinTableNode as a nested recursive TableNode to allow grammar like "A join (B join C)".
This change will also facilitate DerivedTable handling in join queries.