[MRG] 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
- [x] 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...
and I just remembered, it is also to help diagnose when the class object instead of the instance if passed... But the current validation will pass without any explicit warning for class objects with `fit` method... 

But I feel this shouldn't be an issue... Still would like your views :)

Perhaps I could add `and not inspect.isclass(estimator)`...