[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).
For better readability, let's use vals to hold intermediate results ;)