[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).
Maybe a more functional approach?
```scala
def withLeft(newLeft: Row): Row = {
  row1 = newLeft
  this
}
```