Shade and relocate guava dependency to avoid conflicts

In Spark 1.2 guava is not a transitive depenency (had originally used 14.1).  When running on the cluster this creates classpath conflicts with hadoop jars that use guava-11.0.2.

This commit moves the guava classes to an internal package guaranteeing our code uses the newer version
Using your project's name in a Spark relocated dependency is a little sketchy, don't you think? :-)

Also, this would break binary compatibility of the Java APIs, since they expose `com.google.common.base.Optional` (see core/pom.xml and assembly/pom.xml).