Basic neural networks, issue #1975

I wrote a few classes that add support for basic neural networks, backpropagation and training with gradient descent.

The two main classes are:
NeuralLayer, which is an abstract base class that basically defines a group of neurons and how they behave during forward and backpropagation
NeuralNetwork, which connects NeuralLayers together to form a network

The NeuralLayer interface and the NeuralNetwork have been written in way that allows the layers to be completely decoupled from each other, that is, one could build a network with an arbitrary combination of different layer types and the neural network would function correctly without any modifications.

The other two classes:
NeuralLinearLayer: implements neurons with linear activation function
NeuralLogisticLayer: subclasses NeuralLinearLayer to implement neurons with logistic activation function

I also added a small python notebook that shows how to use the neural network to classify digits (USPS dataset):
http://nbviewer.ipython.org/gist/khalednasr/9669443