[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.
Shouldn't you check whether `targetFile` exists *before* you do fetch the file? I thought the whole point of this PR is that all executors on the same node use the same jars, and only the first executor to call `fetchFile` actually fetches the jars, so if the jar already exists then we shouldn't fetch it again just to compare it with the target file.