SPARK-1767: Prefer HDFS-cached replicas when scheduling data-local tasks

This change reorders the replicas returned by
HadoopRDD#getPreferredLocations so that replicas cached by HDFS are at
the start of the list.  This requires Hadoop 2.5 or higher; previous
versions of Hadoop do not expose the information needed to determine
whether a replica is cached.
Given how frequently this is invoked, instead of using reflection, it is better to have an interface and an specific impl to handle this case (where the new hadoop api's are inlined, and not accessed via reflection).
Ofcourse, initialization to use this new impl or None would be based on existance of the methods : and so decided via reflection - but that would be a one time operation (replacing NEW_HADOOP_CLASSES)