[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...
I don't think we want to enforce that all estimators. While true in scikit-learn, third party libraries might want to follow sklearn API conventions without inheritance (duck typing). Checking inheritance will prevent them to reuse that helper function.

Also I also agree that `check_is_fitted` as other validation utility functions should be considered private API for the time being.