Corrected all `hash` member and non-member functions to return the same
type. Changed `CTokenizer` to return hash values instead of sequential
numbers so that the results are consistent regardless of the order of
input.
Changed CPackedScoreMap to be key'd by hash values instead of key
objects.
Removed all thread_local singletons, replacing them with explicitly
passing in the "singleton" whereever it's needed.
Proper shuffling, and no thread invocations if nthreads==1.
Large refactor of the CPackedScoreMap entry types. Removed the final
thread_local pool from LinkedList (why the refactor occurred in the
first place). CPackedScoreMap can now store sparse or dense features,
defined as a template argument.
Code cleanups.
Made some feature types dense.
Initial attempt at more frequent weight mixing.
Separated out ScoreAverage enum.
Switched SCORE_TYPE to be double so that averaging doesn't suffer from
integer truncation.
More work on more frequent mixing.
Added gnuplot script.
In-memory weights merging.
Added SSE and AVX support.
Per-iteration evaluation stats.
Added vectorised hashtable, specialised for the training process.
Added multithreaded support back in.
Don't compile any of the CPacked* code.