[ADAM-511] Provide Ordering for ReferenceRegion

As covered in issue #511, ReferenceRegion shouldn't extend Ordered, but
rather should be ordered by an Ordering value which can be imported
implicitly.  This will fix some "diverging implicit expansion" errors,
and bring us more in line with the Scala documentation on Ordered (which
is intended to be used in classes that have "a single, natural ordering"
-- a description that doesn't apply to ReferenceRegion).

This commit makes these changes, with the new Ordering provided
implicitly in ReferenceRegionContext.  It also includes corresponding
changes to the ReferenceRegionWithOrientation handling, and (finally)
includes changes to downstream classes that use(d) the Region.compareTo
method.

Also bundled in to this commit are two additional changes to
ReferenceRegion:
* Adding explanations to ReferenceRegion asserts.
* Adding 'extend' to ReferenceRegionWithOrientation, allowing a
  strand-specific extension of the region in a single direction.
[ADAM-512] Creating RegionRDDFunctions

Created RegionRDDFunctions, a class that wraps an RDD[ReferenceRegion]
and provides common join, filter, grouping, and counting methods on top
of that RDD.

Also included is a similar implementation for region-keyed RDDs (i.e.
RDD[(ReferenceRegion, T)] for some type T, and another class that wraps
oriented regions.