refactor ray to work with a partially merged graph

@Elmira88 @anbangx @JavierJia @Nan-Zhang 

Sorry this took a while to get the offsets correct for the paired-end reads.  In this branch, I've taken @Elmira88's code and refactored it pretty heavily to let the ray scaffolding work on a merged graph.  This is actually quite a bit more complicated than the unmerged case-- check out the score function for an example of how!

There are tons of `TODO`'s in the code.  I'll be chipping away at them, though anyone is welcome to contribute here.  There are several algorithmic questions to be addressed which I've raised in `TODO` comments as well.

@Nan-Zhang it would be great to have a version of your KMP algorithm that would let me specify ranges.  In the case of paired-end reads, we are searching for a particular subset of one kmer in a particular subset of another kmer.

I'd also love feedback on how to make the scoring more efficient, perhaps via some batch operations.