Add Region Join based on interval trees

This is an interval tree based join in the spirit of #366. I haven't tested it at scale yet so I don't know as of now which one is more efficient... Just I bring this implementation for your consideration. 

I create an interval tree from all regions of rdd1 which I broadcast to all nodes and I query the tree with all entries of rdd2. 

Note that the interval tree uses metadata only, not all contents of rdd1. I keep track of the correspondence between the contents of interval tree and rdd1 through a collection of keys that I zipped with rdd1.
Spark 1.1.0 adds a `zipWithIndex` function.

Also, you probably don't want to key by `_._1`, because if the value is a `Tuple2` (which the output of zip will be), it is already keyed by the 1st value in the tuple.