Added weighted random neuron selection

Added the WeightedList and WeightedListItem classes which allow for user
defined likelihoods that types of neurons will be selected at random.

Also added a negate neuron which takes the value of the neuron whose
synapse has the strongest value and negates it.

Updated the neuron class to include a method to instantiate a randomly
generated neuron.