Refactoring CompareAdam into generator/aggregator, added FindReads.

This is a major update which includes two significant changes.

First, it refactors the generator framework we had written previously into two parts, the generators (BucketComparisons) and a new framework (Aggregator) for aggregating those results.  This basically means that we _could_ aggregate results in different ways in teh future, using the same generators, if we wanted to.  For the moment, we're mostly using the Histogram and HistogramAggregator by default.

Second, I've added the ComaprisonFilter framework, and implemented the FindReads command using those filters.  Each filter wraps a generator, as well as providing a criterion for judging when a particular value passes that filter. This allows us to write FindReads in such a way that it can find reads if _any_ of the generated values for a read pass the filter (this was a problem before because we were doing aggregation-per-read, which made it harder to look inside the aggregated values for a read).

There's now a trivial test, try the two files reads12.sam and reads12_diff1.sam, which differ by the aligned position of a single read.

You should be able to run
  compare reads12.sam reads12_diff1.sam -comparisons positions
and find that there's a diference, and then run
  find_reads reads12.sam reads12_diff1.sam -filters positions=6

and see which read caused the difference.

Actually, that =6 is indicative of a bug (or at least, a non-intuitive "feature") in the position generator that we should look at.

Carl, let me know what you think.
Bringing in Carl's R-code.