+ Fix the bug of calling len when using sparse matrix for fit_params in ...

When using sparse matrix in fit_params, calling len(v) will raise error because the __len__ of sparse matrix is defined as
````
    def __len__(self):
        # return self.getnnz()
        raise TypeError("sparse matrix length is ambiguous; use getnnz()"
                         " or shape[0]")
````
So I added extra cases to deal with sparse matrix in fit_params.
@GaelVaroquaux @queqichao
Sorry, why should we assume that `v` will always be array-like? This `fit_params` is passed to `estimator.fit(..., **fit_params)` as keyword arguments. If `v` is not array-like, calling `_num_samples(v)` will return error, since the code for `_num_samples` is:

```
def _num_samples(x):
    """Return number of samples in array-like x."""
    if not hasattr(x, '__len__') and not hasattr(x, 'shape'):
        if hasattr(x, '__array__'):
            x = np.asarray(x)
        else:
            raise TypeError("Expected sequence or array-like, got %r" % x)
    return x.shape[0] if hasattr(x, 'shape') else len(x)
```
which returns error if the argument is not an array.

I think we should check whether the argument `v` is array-like before calling `_num_samples`.