Change scala.Option to Guava Optional in Java APIs

This pull request changes the public Java APIs to use Guava's `Optional` in place of `scala.Option`, since `Optional` will be friendlier to Java users ([discussion from dev list](https://mail-archives.apache.org/mod_mbox/incubator-spark-dev/201308.mbox/%3CCAOEPXP5iWWTSEhJGq5eafpPY1Dxp8ZTAfuhX9w-2%2BaQ3hApbfA%40mail.gmail.com%3E)).

I added a test case for leftOuterJoin in the Java API (I didn't implement 100% test coverage here because there's symmetry between the different *OuterJoin methods).

I also updated the Java API completeness checker's rule for handling `Option`, rewriting it to `Optional` when it appears in return types and dropping it (e.g. accepting nulls) when it appears in function arguments.