[WIP] Add NotFittedError class and fix all modules to raise uniform errors when not fitted

Fixes #3627 and #3601

- [x] Add `util.validation.NotFittedError`
- [x] Add `_is_fitted` method to check and return boolean, if the passed estimator has `all_or_any` of the passed attributes.
- [x] Add `check_is_fitted` to raise `NotFittedError` when the given attribute(s) aren't available in the passed estimator instance.
- [x] Refactor existing modules to use `check_is_fitted`
- [x] Add tests to ensure all the unfitted estimators {regressors, classifiers, transformers} raise `NotFittedError` when predict ( or related methods are called ).
Thanks to @jnothman for [this](https://github.com/jnothman/scikit-learn/compare/scikit-learn:master...jnothman:unfitted-error)
- [x] Run smoke test and fix all modules which do not currently raise an error, when `predict` like methods are called before `fit`-ing
- [ ] Make travis happy. ( The fixes broke a few modules by forcing them to be assumed as NotFitted based on the attribute absence. )

The `check_is_fitted` should behave more ideally after #3937 is merged...
What is JAGNI?
I hadn't thought of any use cases while I wrote this, but I used this in a few areas like [here](https://github.com/scikit-learn/scikit-learn/pull/4029/files#diff-5f39db23b076437a7807eb68fa55241cR196) and [here](https://github.com/scikit-learn/scikit-learn/pull/4029/files#diff-1741ad6b05f1eb0fd71af8bad0e001c7R520)...

The motivation was that It will behave like a `check_is_fitted` with the output of the result handled externally... It *might* be ( not sure if it is ) useful since it checks supports multiple `attributes` and `all_or_any`.