This checkin contains changes that perform sample compression, and
adds support for HalfFloat objects.

The checkin also includes a decimating sample filter, designed to
interpolate scanned samples into a smaller set of output samples, to
reduce the I/O to Javascript clients that generate graphs.  Nothing
currently uses the decimating filter; I'll leave it to Pierre to hook
it up.

util/src/main/java/com/ning/arecibo/util/timeline/SampleOpcode.java:

    Add opcodes for BIGINT and for BYTE_FOR_DOUBLE, SHORT_FOR_DOUBLE
    HALF_FLOAT_FOR_DOUBLE and INT_FOR_DOUBLE.

    Move REPEAT to 0x7F, since this lets us add new opcodes under
    REPEAT without changing the REPEAT value.

util/src/main/java/com/ning/arecibo/util/timeline/SampleCoder.java:

    Add encode plumbing for the new SampleOpcodes.

    Add method compressSample(), which chooses the smallest
    representation for each sample.  For integral samples, this is
    just choosing SampleOpcode.BYTE, SHORT, INT, LONG or BIGINT,
    depending on the magnitude of the value.  The end result is exact
    for integral types.  For FLOAT and DOUBLE, if the result is within
    the error bar set by MAX_FRACTION_ERROR, which is currently
    defined as 1/200, choose the smallest integral representation or
    HalfFloat representation.

util/src/main/java/com/ning/arecibo/util/timeline/TimeRangeSampleProcessor.java:

    This abstract class implements SampleProcessor and provides
    startTime/endTime filtering of samples.  It hands out samples
    one-by-one, which is what the two existing clients want.

util/src/main/java/com/ning/arecibo/util/timeline/TimelineChunkAndTimes.java:

    Change the CSVOutputProcessor from implementing SampleProcessor to
    extending TimeRangeSampleProcessor, which cuts down on duplicated
    code.  At some point, it would be more efficient if the csv format
    allowed repeat codes, but it doesn't now.

util/src/main/java/com/ning/arecibo/util/timeline/TimelineHostEventAccumulator.java:

    Call SampleCode.compressSample() before handing the sample off to
    timeline.addSample().

util/src/main/java/com/ning/arecibo/util/timeline/TimelineTimes.java:

    Eliminate some unused warnings.

util/src/main/java/com/ning/arecibo/util/timeline/HalfFloat.java:

    A kribbed implementation of HalfFloat.

util/src/main/java/com/ning/arecibo/util/timeline/DecimatingSampleFilter.java:

    New unit that interpolates scanned values to deliver no more than
    a fixed number of output values.  The algorithm guarantees to
    always deliver the value of an actual scanned sample, and to
    always deliver either the min or max value of scanned samples
    making up the output sample.  The sample time will always be the
    middle of the time window represented by the output sample.

util/src/main/java/com/ning/arecibo/util/timeline/SampleConsumer.java:

    An interface with method processSample(int sampleNumber,
    SampleOpcode opcode, Object value, DateTime time), invoked by
    DecimatingSampleFilter.

util/src/test/java/com/ning/arecibo/util/timeline/TestDecimatingFilter.java:

    A unit test for DecimatingSampleFilter.

util/src/test/java/com/ning/arecibo/util/timeline/TestSampleCompression.java:

    A unit test for the SampleCoder's compressSample() method.
Comment out logging used to debug TestDecimatingFilter
Add licenses for the new units I created
Merge branch 'collector-ng' of github.com:ning/Arecibo into collector-ng