Handle duplicate timestamps

Duplicate timestamps are handled automatically with last-written wins.
In addition, the compaction code is cleaned up and unified - instead of
having separate code paths for trivial and complex compactions, there is
only one code path.  However, it is faster than the trivial path was
before, particularly for large rows.
Address review feedback

Rename Colummn->ColumnDatapointIterator, add finals, change field/param names to
underscores rather than camel-case, Javadoc, add fix_duplicates flag to control
whether to fix or fail.
Fix returning sole datapoint column
Add tests

These tests would have detected this missing return value in the case
of a single datapoint.
Fix for handling bare annotations

I changed the way SpanGroup deals with annotations - rather than collecting them from
the set of data points that passed the filter, the set of annotations is built up front.
This allows us to handle Spans with no data ponts but an annotation.
Restore previous test & add new one, cleanups