[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

Could it be simplified to
```
samples = np.arange(n_samples)[np.diff(y.indptr) == n_outputs & y_i_max.ravel() < 0]
for i in samples:
    ...
```
?