[MRG] Generic multi layer perceptron

Currently I am implementing `layers_coef_` to allow for any number of hidden layers.

This pull request is to implement the generic Multi-layer perceptron as part of the GSoC 2014 proposal. 

The expected time to finish this pull request is June 15

The goal is to extend Multi-layer Perceptron to support more than one hidden layer and to support having a pre-training phase (initializing weights through Restricted Boltzmann Machines) and a fine-tuning phase; and write its documentation.

This directly follows from this pull-request: https://github.com/scikit-learn/scikit-learn/pull/2120
As a very general remark on the design of this object/algorithm, I must say that I am a bit uneasy with all the internal states of the algorithm, that are very hidden/implicit in the code. I have in mind the _a_layers, _deltas,
._coef_grads, self._intercept_grads. They make the code hard to follow, because it is not possible by looking at a function/method call to know what has been changed.

How much possible is this to explicitely pass them around the code, rather than having them as attributes on the object? At least for a_layers, as these seem to me like they don't have core intrinsic difference to X and y, at least in terms of code organization.