[MRG] Sparse label_binarizer

This is a continuation of a part of PR #2458 based on the code already written by @rsivapr and @arjoly from the branch https://github.com/arjoly/scikit-learn/tree/sparse-label_binarizer.

The first steps are to write tests to motivate correctness and then implement the appropriate changes in label.py.

Initial Checklist:

- [x] label validation on ```LabelBinarizer()``` - with testing
- [x] label validation on ```label_binarizer()``` - with testing
- [x] Import changes for label.py from arjolys branch sparse-label_binarizer
- [x] Import changes for test_label.py from arjolys branch sparse-label_binarizer
- [x] Handle case where type_of_target gets a sparse matrix input
- [x] Debug: One Label Tests in sklearn/tests/common.py
- [x] Test ```is_label_indicator_matrix``` with sparse input
- [x] Test ```label_binarize``` with binary one class case 
- [x] Break down _inverse_label_binarize

Rebase Checklist:

- [x] Rebase on top of PR #2657 changes in label.py
- [x] Rebase on top of PR #2657 changes utils/multiclass.py
- [x] Reintegrate sparse_output tests in test_label.py
- [x] Reintegrate sparse_output tests in utils/test_multiclass.py
- [x] Reintegrate coverage boosting tests in test_label.py, test_multiclass.py
- [x] Include changes to Misc. files guided by make errors
- [x] Documentation updates
- [x] Deprecate parameters in lable.py as in previous changes

I wouldn't expect that this code fail in presence of only zeroes. Furthermore, this doesn't follow the same behavior of argmax. Looking one more time at the code, there is possible bug when you have only negative non zero values.

Here a sample code that would solve those issues
```
n_samples, n_outputs = y.shape
outputs = np.arange(n_outputs)
y_i_max = y.max(axis=1)
y_inverse = np.empty(n_samples, dtype=classes.dtype)

for i, (start, end) in enumerate(zip(y.indptr[:-1], y.indptr[1:])):
    if y_i_max > 0. or end - start == n_outputs:
        # Fully populated row or the maximum is a positive value
        c = y.indices[start + y.data[start:end].argmax()]
    elif end - start == 0:
        # Only zeroes
        c = classes[0] 
    else:
        # Mix of negative values and zeroes
        c = classe5[np.setdiff1d(outputs, y.indices[start:end])[0]

    y_inverse[i] = classes[c]
```