[SPARK-2076][SQL] Pushdown the join filter & predication for outer join

As the rule described in https://cwiki.apache.org/confluence/display/Hive/OuterJoinBehavior, we can optimize the SQL Join by pushing down the Join predicate and Where predicate.
How about?

```
/**
 * Splits join condition expressions into three categories based on the attributes required
 * to evaluate them.
 * @returns (canEvaluateInLeft, canEvaluateInRight, haveToEvaluateInBoth)
 */
```