Clean up and simplify Spark configuration

Over time as we've added more deployment modes, this have gotten a bit unwieldy with user-facing configuration options in Spark. Going forward we'll advise all users to run `spark-submit` to launch applications. This is a WIP patch but it makes the following improvements:

1. Improved `spark-env.sh.template` which was missing a lot of things users now set in that file.
2. Removes the shipping of SPARK_CLASSPATH, SPARK_JAVA_OPTS, and SPARK_LIBRARY_PATH to the executors on the cluster. This was an ugly hack. Instead it introduces config variables spark.executor.extraJavaOpts, spark.executor.extraLibraryPath, and spark.executor.extraClassPath.
3. Adds ability to set these same variables for the driver using `spark-submit`. 
4. Allows you to load system properties from a `spark-defaults.conf` file when running `spark-submit`. This will allow setting both SparkConf options and other system properties utilized by `spark-submit`.
5. Made `SPARK_LOCAL_IP` an environment variable rather than a SparkConf property. This is more consistent with it being set on each node.
@pwendell <code>extraOpts</code> will be read as arguments of <code>org.apache.spark.executor.CoarseGrainedExecutorBackend</code>, which will lead to parse error if <code>extraOpts</code> is not empty. Because the 4th argument of <code>CoarseGrainedExecutorBackend</code> is <code>Int</code> type, and if <code>extraOpts</code> is not empty, other values instead of <code>numCores</code> will be regarded as 4th argument to cast to Int and cause error. Do I have any misunderstanding of this:)