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
On the first point is there better practice for this? Took the example from the spark pom
```
              <relocations>
                <relocation>
                  <pattern>com.google</pattern>
                  <shadedPattern>org.spark-project.guava</shadedPattern>
```

Can you explain a bit more on how this would affect the Java APIs?  My impression was that only the classes included in this jar would use the relocation while other jars would use there relocated version or what is available under the proper package name on the classpath?