[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.
These codes just follow https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/util/Utils.scala#L354
I think we need fetch the file firstly then compare cachedFile's constant and targetFile's constant.(<code>!Files.equal(cachedFile, targetFile)</code>) because we can't sure that the file's constant is not changed while <code>timestamp</code> is changed.