[SPARK-2713] Executors of same application in same host should only download files & jars once

If Spark lunched multiple executors in one host for one application, every executor would download it dependent files and jars (if not using local: url) independently. It maybe result in huge latency. In my case, it result in 20 seconds latency to download dependent jars(size about 17M) when I lunched 32 executors in every host(total 4 hosts).

This patch will cache downloaded files and jars for executors to reduce network throughput and download latency. In my case, the latency was reduced from 20 seconds to less than 1 second.
Minor nitpick on naming, but I think it's confusing to have a method named `fetchCachedFile` with an option that has to be explicitly set in order to use the cache.  I'd prefer to name this `fetchFile`, and rename the other method to something like `doFetchFile` or `_fetchFile`.

When fixing the merge conflict, do you mind moving the comment from the old `fetchFile` to here?  I think the most comprehensive documentation should be on the public function, not the private one.  I'd say something like

```scala
/**
    * Download a file requested by the executor . Supports fetching the file in a variety of ways,
    * including HTTP, HDFS and files on a standard filesystem, based on the URL parameter.
    *
    * If `useCache` is true, first attempts to fetch the file from a local cache that's shared across
    * executors running the same application.
    *
    * Throws SparkException if the target file already exists and has different contents than
    * the requested file.
    */
```