[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 `check_is_fitted` to raise `NotFittedError` when the given attribute(s) aren't available in the passed estimator instance.
`check_is_fitted` will also simply return the result if the `raise_error` parameter is set to `False`.
- [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 `check_is_fitted` should behave more ideally after #3937 is merged...
Ignore the above comment... such level of validation for private api is not required...