NormalizedDemocracy Kernel, Self Normalizing Vectors, Overriden Zero Behaviour

First, Self Normalization is when a vector looks at all of it's
components, then normalizes against itself into the range 0 to +1. This
style of normalization is common in 'voting' (math: Mode) or democracy
vectors; whereby layers in a neural network may be voting layers in
which a single neuron, or some neurons are chosen, by means of a vote.

Second, please find the Kernel class newly added, currently with a
single static kernel method: NormalizedDemocracy. The Normalized
Democracy kernel takes a list of unique classification vectors generated
using Yarn.BuildClassifications(), as well as the results of a
KNearestNeighbour Search. Essentially taking the K Nearest Neighbour's
classification vectors, counting the occurrences into a vector, then
self normalizing that vector.

Finally, we add some new 'divide by zero' behaviour to the normalization
process, whereby if all components are to be divided by 0 (meaning 0
range in the set), all components are set explicitly to 0 instead of NaN
(which isn't a very useful value). We use 0 and not Epsilon
(0.0000000001) because there is actually no discernability in a 0-range
set, and representing no discernability with any value is a 'lie' that
could impact final accuracy.