GSoC 2014: Standard Extreme Learning Machines

Finished implementing the standard extreme learning machines (ELMs). I am getting the following results with 550 hidden neurons against the digits datasets,

Training accuracy using the logistic activation function: 0.999444
Training accuracy using the tanh activation function: 1.000000

Fortunately, this algorithm is much easier to implement and debug than multi-layer perceptron :).
I will push a test file soon.

@ogrisel , @larsmans
> BTW it would be cleaner to extract the random weight init in a private method to make it possible to implement custom weight init by deriving from the ELM classes.

I am creating `neural_network_utils.py` that contains tools for neural network algorithms like activation functions, their derivatives and weight initialization method.

Below is the weight initialization method
```python
def _init_weights(weight_scale, n_features, n_hidden, random_state):
    rng = check_random_state(random_state)

    coef = rng.uniform(-1, 1, (fan_in, fan_out))
    intercept = rng.uniform(-1, 1, fan_out)

    if weight_scale != 1:
        coef *= weight_scale
        intercept *= weight_scale

    return coef, intercept
```
Do you suggest this is appropriate?
Thanks.