[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

Don't say "as of version 0.16", it's just as relevant in development. And users shouldn't care when it changed, they should just update their code when they can migrate all their environments.