[MRG+1] Ensure delegated ducktyping in MetaEstimators

Supersedes #2019 to fix #1805, with a more readable (?) reimplementation, and an extension of the test to fix #2853.

This patch ensures that:
* `GridSearchCV`
* `RandomizedSearchCV`
* `Pipeline`
* `RFE` and
* `RFECV`

have  `hasattr(metaest, method) == True` iff the sub-estimator does for the set of standard methods:
* `inverse_transform`
* `transform`
* `predict`
* `predict_proba`
* `predict_log_proba`
* `decision_function`
* `score`

(with some exceptions where delegation doesn't apply).

To fix #2853, `hasattr` must be True before the metaestimator is `fit`, and if the delegating method is called before fit, an exception will be raised, as with other un-fit estimators.


Some alternatives are posed here and below:
* *(A)* custom descriptor as in this PR (https://github.com/scikit-learn/scikit-learn/pull/2854/files#diff-589a953cf2ee991da252f7da86c1e5b9R176)
* *(B)* property with access and nested function (https://github.com/scikit-learn/scikit-learn/pull/2854#issuecomment-35245852)
* *(C)* property with `if hasattr` and nested function (https://github.com/scikit-learn/scikit-learn/pull/2854#issuecomment-35351774)
what is the benefit of this way compared to storing ``attr`` and calling ``getattr(obj, attr)``?