[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...
Is there any other way we could check if it is an estimator instance? 

perhaps this?

`any([hasattr(estimator, method_name) for method_name in ["predict", "fit", "partial_fit", "transform", "decision_function"])`