dereference hash for use with values

Several testers reported failures because of `Test::NoWarnings` and the
deprecated use of `values` with a references, so dereference `$gangs`
before calling values on it.
properly sort gangs for deterministic tables

Some CPAN testers reported errors because the gang summaries were
misordered. Fix this problem by sorting parts of gangs by their
class label. Also make sure that ordering of entire gangs stays
deterministic by sorting gangs with tied scores by their class
labels.
use threshold for comparing floating-point values

Some CPAN testers used machines with different levels of floating-point
precision, and thus tests which directly compared such values failed.
Use `Test::Deeply` to compare the gang effect values with a threshold
(epsilon), thus avoiding these failures.
use objects instead of indices in gang structure

Instead of using data indices in the gang structure given by `Result`,
use the actual `Item` objects. This is much easier to work with. Update
tests to match.
make Item immutable

I was worried about the kinds of changes that could be made to Item
after it had already been used in classification and thus stored in
a Result object. Changing it could really confuse someone trying to
interpret results printed later on. So make Item immutable, removing
the `Class::Tiny` usage and instead providing a constructor and
getters.

The removal of `Class::Tiny` somehow changed the place where `croak`
reports errors to what I expected it to be: the calling file. This
is fortunate, and means that the tests can verify correct behavior now.
Update tests accordingly.
don't test internal Item state directly

Instead of testing the internal state of `Item` objects directly,
use the `all`, `isa` and `methods` functions of `Test::Deep` to test
the aspects of Item objects that are supposed to be visible.
slight update in analogical set documentation

I believe that items in the analogical set can point to any class,
not just the one that was chosen. Thus this edit.
add id field to Item

Add an `id` field in `Item` to aid in indexing. The id isn't anything
special; just a string that Perl increments every time a new `Item` is
made.
add Item to analogical set structure

Change the analogical set structure so that 1) it contains the actual
`Item` object and 2) it is indexed by item id so that the desired
analogical effect can be retrieved quickly. Update tests accordingly.
update changes
remove unused variable (caught by release test)
scrub code of 'outcome'

The word 'outcome' is no longer used, so replace it with 'class'
everywhere.
scrub code of 'exemplar'

`exemplar` should only be used in the AM descriptions which should
match literature. Use the word `item` or `training item` elsewhere.
scrub code of 'spec'

`spec` is no longer used, in favor of `comment`, which I find clearer
and less misleading, since `spec` seems to suggest an ID, which it is
not.
fix unused variable, again
New CPAN release of Algorithm-AM - v3.01

    Gang and analogical set structures changed to contain Item objects
    Unique id field added to Item
    analogical set structure changed to index on Item id for easy searching