refactoring of mlperceptron

I tried to aim for a few goals as discussed in the sklearn pull request:
- have different concepts=classes for activation functions and weights
- have different concepts for weight updates
- not to sacrifice speed for doing the above
- potentially allow to reuse components for multiple layers

I'm pretty sure I removed some bugs in the sequence of gradient calculation and weight updates in the process. At the same time, I 'simplified' few features away while debugging (e.g. the special tanh), but I'll put them in again once we can agree on the structure.