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

Attempting to fix #3896

**New `partial_fit` tests:**
The below tests are based off @arjoly's [suggestion](https://github.com/scikit-learn/scikit-learn/issues/3896#issuecomment-64862823).

- [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 if mismatch between `classes` argument and `np.unique(y_i)` for a particular pfit call raises `ValueError`.
  * b. Check that error is raised if `classes` is not specified during first `partial_fit` call.
- [x] 4. assert that `partial_fit` returns `self` - Thanks @jnothman for [the suggestion.](https://github.com/scikit-learn/scikit-learn/issues/3896#issue-50330161)

**Other tests**
- [ ] `fit` should always be equivalent to `clone(est).fit` - Thanks @amueller for [the suggestion](https://github.com/scikit-learn/scikit-learn/pull/3907#issuecomment-68411916)

**New features / enhancements:**
- [ ] Refactor `MiniBatchKMeans` to conform to `clone(est).fit == fit` semantic.
- [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` does nothing hence is skipped from tests...
* `MiniBatchDictionaryLearning` and `LSHForest` do not generallize well like other pfit capable transformers and hence `partial_fit` testing for the same should be done under its own dedicated tests.
* `MiniBatchKMeans` does not reset when fit after a `partial_fit` or `fit`. Hence is skipped for that test alone.

Why `all` for negative filters -
When a name filter contains multiple negative filters like `['!HashingVectorizer', '!MiniBatchKMeans']` the output of `name_tests_pass` (without aggregating) for `!HashingVectorizer` is [ True, False ] and needs to be aggregated with `all` to prevent `HashingVectorizer`... 

Why `any` for non negative filters -
However when non negative filters like `['HashingVectorizer', 'MiniBatchKMeans']` are used the output of `name_tests_pass` (without aggregating) for `HashingVectorizer` and `MiniBatchKMeans` is `[ True, False ]` and `[ False, True ]` and needs to be aggregated by `any` to include both `HashingVectorizer` and `MiniBatchKMeans`. 

Why split the two and also why `all` before `any` -
When both negative and positive filters are given (erroneous input), the output filter should not get messed up and still try to produce sensible output... ( `['!HashingVectorizer', 'MiniBatchKMeans']`   =>  [`MiniBatchKMeans`] )