Separate AM into AM and Batch

Apologies for such a large commit. Make `AM` a package for
classifying single items, and creates `Batch` to do all of the batch
classification using `AM`. This includes logic involved with changing
training sets (datacap, probability and datahook), and all hooks.

Completely reorganize the test suite to match what I believe is the final
project organization. It was getting messy anyways.

The new organization is much easier to work with and understand.

checkpoint: finished batch, basically

checkpoint: 09-hooks.t pases

checkpoint: constructor tests for batch

classify passes

checkpoint: result printing passes

all but probability passing

using Class::Tiny

checkpoint: test all reorganized
add test for malformed input data

The test for throwing an error with a bad data file was lost during the
migration from `Project` to `DataSet`, so add it back now.
remove extraneous test data

With the reorganization of `Project` into `DataSet`, the full data/test
project structures became unnecessary. Remove all unneeded files, and
rename the other ones to be text files (this was not allowed when data
and test were required to be named `data` and `test`).
clarify test names for unknowns

The tests that made sure a feature was `''` still said that the
feature was undefined, instead of empty. Rename the tests checking
for unknowns so that they are not dependent on the actual
representation of unknowns.
Remove batch parameters from AM

Remove the leftover accepted parameters from AM, as `probability`, etc.
no longer have any meaning there.
slight cleanups in Batch

Make `my` variables more localized, and remove all those unneeded
`define`s.
Add max_training_item setting to Batch

This setting was known as `datacap` previously, and was accidentally
removed somewhere along the way. If the user specifies
`max_training_items`, then cap the amount of data used for training
during classification.
incorporate $pass into Batch

Instead of passing an anonymous hash holding iteration variables to
hooks, move the last variable standing, $pass, into `Batch` and use
an accessor to get its value instead. Update all hooks and tests.
pass actual test item to datahook

Instead of passing the data item index to `datahook`, pass the actual
item. This was apparently never tested, so add a test for it, as well.
add excluded_data

Add the `excluded_data` method to `Batch` and test it along with
other hook related variables.
replace vector_length with cardinality

To make `Item` and `DataSet` consistent, replace `vector_length` with
the more proper term `cardinality`.
change Batch's classify to classify_all

I think this should help prevent confusion between what is an `AM`
object and what is a `Batch` object. Also rename variables from `$am`
to `$batch` where opportunity presents itself.
don't use batch before it's tested

Remove the use of `Batch` from the `BigInt` test file, which is run
before the `Batch` test file is.
clean out DataSet's guts

Clean out the internals and private externals of `DataSet`. Name the
private accessors more clearly. Replace 'outcome' and 'spec' with
'class' and 'comment'. Remove all unneeded structures, and update
comments where necessary/possible. It looks much better now.