refactor TestUtil methods for retrieving data sets.

Make them reusable for other datasets besides the chapter 3 data.
use BigInteger and BigDecimal

AM can produce very large integers, and thus the XS version uses custom
128-bit decimal numbers. Replace ints and doubles with `BigInteger`s
and `BigDecimal`s. Store the `MathContext` required for division in
`AMUtils` and document the 10-decimal-place precision. Update tests as
needed to maintain passing state.
some supracontext refactoring

Move the supracontext combining code into its own class. This may not
be ideal, but for now it helps to keep `DistributedLattice` small.
Also refactor to remove unneeded setters from `Supracontext`. Now it is
immutable, except for the `next` reference. Add a new constructor for
setting the immutable fields.
Update readme file

Add information about how to build the project in the readme file. Make
it markdown to be friendly to GitHub usage.
fix labeler logic for unknown variables

There was a bug in the labeler that caused it to always set the first
bit in a label when considering unknown variables. Fix this, and update
the test, as well (which previously tested for incorrect behavior).
merge with labeler fix later
fix lattice bug which creates extra supracontexts

There was a logic bug in the code for filling the lattice. Previously,
if the first supracontext a sub was added to became heterogeneous, it
was not added to its children. This is incorrect because the children
may have different supracontexts; say we just added to 01010 and a
previous item had the label 11010. Then the supracontext located at
11010 would be different, and it also needs to be added to so that it
is marked heterogeneous.

The correct logic is to check if the supra to be added to is ALREADY
heterogeneous, in which case we know we don't have any work at all to
do. I confirmed this by looking at the 2.1 C implementation
(amc.c, line 76).

To test that this works properly, classify a paired-down version of the
finnverb data set (the full one does not yet work correctly). Add
utilities for reducing data cardinality for testing purposes.
fix bug in timing of call to cleanSupra()

`cleanSupra()` was being called after each and every lattice insertion.
In some cases this created `Supracontext.next()` values of the current
index but which were completely unrelated to their linking
`Supracontext`, which is a violation of the algorithm's invariant.
Calling `cleanSupra()` after the insertion of an item into all of its
descendant nodes guarantees that the current index will be higher than
those of unrelated supras reachable via `getNext()`. This unifies the
implementation with that of amc.c, line 83.

Add another reduced finnverb test to show that the behavior is fixed.
This should also be added to the lattice test later.
fix incorrect cleanSupra algorithm

Previously, `cleanSupra` would sometimes leave supracontexts with count
0 in the list. I can see that the algorithm was flawed, but I can't see
exactly how these 0 supras were left in the list. Replace the algorithm
with the original one from amc.c line 142. Add an integration test for
this as well.
verify accuracy of full finnverb set

Run a single classification with the full set and verify the class
pointer counts, and then run a leave-one-out classification of every
item in the set. Test the results against those given by
`Algorithm::AM`.

Also change `getPredictedClass` to `getPredictedClasses`, since there
could be a tie for highest-scoring outcome.