Yarn and Vector Comparisons by Equality and HashCode

First, we often need to work with datasets that have been unexplored,
which requires data massaging on a level higher than immediate generics
can support.  Yarn (fuzzy string) is a static collection of methods for
massaging data.

Second, in a single XOR case (0, 1 - > 1), we refer to the (0, 1) as the
expression and the (1) as the classification; Yarn can extract a unique
list of classifications and expressions; a unique list of
classifications is needed to perform a kernel function (usually only on
classification problems, doesn't always apply to all function
approximation). XOR has two different classifications (0 and 1) and four
different expressions (00, 01, 10 and 11).

We use hashsets to build unique sets with yarn, however hashsets only
use the .Equals method as a fallback after HashCodes failed to match.
Therefore we 'short circuit' the hashcode expression of all vectors to
be 0 (and therefore always equal, and forcing the comparison to be made
by equality operation). This allows us to avoid using interfaces all
over the place, which is IMHO very messy to work with.