[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).
What was the wrong with the way this was before?  By duplicating the logic for doing filtering you are making this operator more complicated and now when we do things like codegen we are going to have to make changes to condition evaluation in two places.