added generics to allow using any type of neuron classes (make your own by implementing the interfaces provided)
made changes to include the image pattern matching classes