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
This is shading all of Guava into the new package. The Spark Java API exposes Guava's `Optional` class in its public API, so you can't relocate that class (nor the two other classes it depends on), or you'll break compatibility of the Spark API.

When I worked on SPARK-2848, I wrote this:
https://gist.github.com/vanzin/bd9057fadf4a296220b7

I haven't used it in a while, but you can use it to print all the references of a class in a list of jar files. I'd run it on the list of jars generated by a build with this PR applied, and check that:

- all references to Optional/Present/Absent reference the com.google.guava class
- all other references to com.google.guava classes refer to the relocated package