[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
Nevertheless with the flat array, you will avoid many allocation. Because you will work with memory view. Here a small ipython example

```
In [1]: import numpy as np

In [2]: a = np.arange(4)

In [3]: b = np.arange(3)

In [4]: c = np.hstack([a, b])

In [5]: c.flags
Out[5]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [6]: d = c[:4]

In [7]: e = c[4:]

In [8]: d.flags
Out[8]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [9]: f = d.reshape((2, 2))

In [10]: f.flags
Out[10]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

In [11]: a.flags
Out[11]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  UPDATEIFCOPY : False

```

Array `a` and `b` owns their data and there is a copy involved when creating `c`.
While the flat `c`array owns the data,  taking a stride (array `d` or `e`) and reshaping (array `f`) a sub-array of `C` doesn't create any copy. 

I have played a bit with the code and the packed_meta_parameters is not easy to use.