[SPARK-911] allow efficient queries for a range if RDD is partitioned wi...

...th RangePartitioner
This is better, but I think it could be further simplified.  It's confusing to have a `match` statement where we `return` from one branch and keep going from another.  Here's what I have in mind (I think this works, but haven't checked; this is psuedocode):

```scala
self.partitioner match {
   case Some(rp: RangePartitioner) => {
       val partitionIndicies = {
          // compute indicies here using `rp`
       }
      val prunedRdd = PartitionPruningRDD.create(self, partitionIndicies.contains)
      prunedRdd.mapPartitions(rangeFilter)
    }
    case _ =>
       self.mapPartitions(rangeFilter)
```