[SQL][SPARK-2212]HashJoin(Shuffled)

Currently only the nested loop join for outer joins, as part of the join optimization tasks [SPARK-2212](https://issues.apache.org/jira/browse/SPARK-2212), I initially add the hash based join for all type of joins. This is may some duplicated with [#734](https://github.com/apache/spark/pull/734).
Putting all of the join types in a single strategy means that we will never consider multiple ways to execute a given join.  The whole point of strategies is that we can eventually add cost based optimizations as part of the QueryPlanner infrastructure.