Added a region-join implementation.

Fixes ISSUE #83.
- This allows for joining different types which are aligned to different
  ReferenceRegions
- A record will appear in multiple different places when it overlaps
  multiple different regions

For testing purposes, we've also added a 'cartesian join' implementation, which
operates by using the cartesian product operation on RDDs, followed by a filter.
This should be logically equivalent to the region join implementation here, but
is probably slow enough that we would only use it for testing in real-life situations.

Added SequenceDictionary.containsRefId to support the regionJoin operation.

An example of using the regionJoin method is presented in the new CLI command,
CalculateDepth.  CalculateDepth (accessible as the command 'depth' through AdamMain)
takes two arguments, an ADAMRecord file and a VCF (or equivalent) file, and calculates
the number of reads (the 'depth') from the ADAMRecord file which overlap each of the
variants given by the VCF.  It then reports, on standard out, the location and name
of each variant along with the calculated depth.

Adding comments.

Renamed some methods, some classes, and added extensive comments.
Merge pull request #117 from genomebridge/regionJoin

Add a "range join" method.
Added switches to spark context creation code to allow buffer size increase and increased logging for profiling.