[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 think we should again try to avoid looping through samples in Python loops.

So, to get the argmax for each row, as I concluded -- with assistance -- (on stackoverflow)[http://stackoverflow.com/questions/22124332/group-argmax-argmin-over-partitioning-indices-in-numpy], we can do something like:
```
repeated_max = np.repeat(y_i_max, np.diff(y.indptr))
all_argmax = np.flatnonzero(repeated_max == y.data)  # picks out all indices obtaining the maximum per row
result = np.searchsorted(all_argmax, y.indptr[:-1])  # picks out the first argmax in each row
```
This may have higher asymptotic space complexity than your solution, but is likely to run much faster in Python.

The rows with `end - start == 0` can be identified by `np.diff(y.indptr) == 0`, fully populated can be identified similarly, and negatives and zeros are those that are not fully populated and whose `y_i_max` is less than 0. I am not sure how to do the set diff without iterating over these rows directly, but may think about it!

Ultimately it would be interesting to offer a solution for this (perhaps in Cython) back to `scipy.sparse` and the implementation you land up with here can go into sklearn.utils.fixes instead of here.

It may also be worth considering whether there is a simpler solution with CSC, but I expect this too will require a Python for loop (but over classes rather than samples, which is preferable).