[MRG] Adding tests for estimators implementing `partial_fit` and a few other related fixes / enhancements

Attempting to fix #3896

**New tests added:**
The below tests are based off @arjoly's and @jnothman's suggestion. 

Ref : [comment](https://github.com/scikit-learn/scikit-learn/issues/3896#issuecomment-64862823) at #3896 

Please feel free to add more tests if required:

- [x] 1. Check that an error is raised if the number of features changes from one partial fit to another.
- [x] 2. Check that doing fit after a set of `fit` / `partial_fit` restarts the estimator
- [x] 3. Check that classifier handles correctly the classes argument in the `partial_fit`.
* a. ~~Check that error is raised if no of classes specified initially is lesser than subsequently witnessed during partial fit.~~ Cannot be tested since some of the estimators just ignore `classes` arguments in subsequent calls.
* b. Check that error is raised if no of classes is not specified during first `partial_fit` call.
- [x] 4. assert that `partial_fit` returns `self` - @jnothman 's suggestion.
- [x] Clean up the `partial_fit` tests and make it recognize different types of estimators and test them accordingly...
- [x] Check if mismatch between `classes` argument and `np.unique(y_i)` for a particular pfit call raises `ValueError`.

~~Check that doing fit -> partial fit == partial_fit, partial_fit~~

**New features / enhancements:**
- [x] Implement `method_filter` to help separate the estimators which implement any specific method(s) [ eg `partial_fit` ]<br/>
* `method_filter` : ( In `sklearn.utils.testing.all_estimators` )
To filter the estimators based on the existence of one or more methods passed as a list of method names. The method name(s) can be prefixed with `!` to avoid those methods.
The default `method_filter` value is `None`. It can also be an empty list.
- [x] Implement `name_filter`:
`name_filter` : ( In `sklearn.utils.testing.all_estimators` )
To filter the estimators further based on their names. This is especially useful with the `!` prefix.
For example among the classifiers that implement `partial_fit`, `HashingVectorizer` needs to be excluded for the `partial_fit` tests. 
This can be done  by `all_estimators(method_filter = ["partial_fit"], name_filter = "!HashingVectorizer")`

- [x] `type_filter` will accept `!` prefix.

- [x] Tests for `utils.testing.all_estimators` method

**NOTE**

`HashingVectorizer`'s `partial_fit` is empty and hence skipped from tests...
`MiniBatchDictionaryLearning` and `LSHForest` do not clearly come under either of `(regressor, transformer, classifier)` and hence `partial_fit` testing for the same should be done under its own dedicated tests.
Verifies that the `transform` / `predict` resets to the `result_first_fit` when `fit` called for 2nd time after multiple `partial_fit`

Except `MiniBatchKMeans` all estimators ( which excludes `HashingVectorizer`, `LSHForest` and `MiniBatchDictionaryLearning` ) follow the `fit` -> `partial_fit` -> `fit`   == `fit` semantic.