Organize $data and iteration variables

The `$data` variable passed to hooks only contained iteration-specific
information, so rename it in all of the tests. Then clean it up in the
`AM.pm` side, replacing it with named variables, and simply creating
the iteration variables hash anonymously when needed for the hooks.
remove unneed project initialization message

As we no longer have to initialize projects in the `AM` constructor,
there is no need to log a statement that we are doing so, and
definitely no need for the logic to check if it is an object or not,
as that is always the case.
reorganize AM initialization

Move all of the guts-related initialization logic into a separate
subroutine called `_initialize`. Rename the `_initialize` method
in XS to `_xs_initialize`. Having all the guts logic in one place
makes it easier to skip and the rest of the program to read.
remove unneeded _create_classify_sub method
remove unneeded __DATA__ block
move TODO exports into Result

The "to export someday" list now properly belongs in `Result`, so put
it there, after removing the things that have already been exported.
remove unneeded line directives

The line directives were needed for navigating the huge `eval`d block
when there were errors. As the `eval` is no longer used, the line
directives are no longer needed (and actually make things more
difficult).
Remove unneeded private data accessors

`Project` had several accessors for private data needed by `AM`. These
are no longer needed, so remove them. Update tests as necessary.
remove unneeded format-related variables
create DataSet package

Create `DataSet.pm` to represent a set of data, whether train
or test. Use clearer terminology than that used in `Project.pm`, and
use named parameters. Add tests.
create and use an Item class

Use an Item class to bundle item data together. Add `get_item` to
replace `get_comment`, etc. in `DataSet.pm`. Update tests.
add cardinality method

It will be useful for an item to be able to report the size of its own
feature vector. Thus, add the `cardinality` method to item. Update
tests.
add dataset_from_file function, update add_item

To replace the reading functionality of `Project`, add
`dataset_from_file` to `DataSet`. This time require the user to be
explicit about the input format instead of having a default with
logging. Make the function an export. Update `add_item` to also accept
an `Item` object, and take advantage of this in `dataset_from_file`.
Update tests.
better support for unknown features and classes

Add functionality for reading files that contain items with unknown
classes. Allow the user to decide what string signifies unknown, with
`UNK` as the default. Extend this customizable support to features, as
well, so that by default `UNK` can be used for both unknown classes and
unknown features. Unknown features are set to undef in `Item`, and this will replace the hardcoded use of `=` in `AM.pm`. Update tests.

Change the default item comment to be a comma separated list so that
unknown feature values are easier to see (trailing whitespace is
definitely not).
save unknown features as '' instead of undef

I ran into an interesting problem with null features being represented
by undef. The `_context_label` method in `AM` will get stuck in an
infinite loop with `exclude_nulls` turned on. This is because `$index`
will often extend past the end of the array, and these elements are
autovivified as `undef`. So `++$index while !defined $array[$index]` is
deadly.

Change the null variable representation to simply `''`, which is
convenient because it is already difficult (impossible?) to represent
it in supported file formats, and it avoids the above described
problem.
replace Project with DataSet

Remove the use of `Project` everywhere and replace it with `DataSet`.
The AM constructor now requires separate train and test inputs. This
will make everything much more flexible and reusable.
clean up exports tests

Fix several misnamed tests. Then remove the printing of names of hooks
next to tests, as it is quite unnecessary since we started using
subtests.
pass Items to hooks

Instead of passing anonymous arrays with test item info, pass actual
`Item` objects. Update tests accordingly.
clean up unneeded variables

Clean up unneeded variables in `Result` and `AM`. These were mostly
possible because of the presence of the `Item` class, but `$grandtotal`
was also elimintated because it is contained in the pointers hash.
die when test/train have mismatched cardinalities

As mismatched cardinalities in test and train would be completely
disastrous, make sure that `AM` checks this before doing
classification.