Added overload for retry to accept a Func1<Obs, Obs>

Implemented a new overload for Retry operator that accepts a `Func1<Observable<Notification>>, Observable<?>>` for determining retry behavior and reimplemented the existing retry overloads in terms of the new overload. I intend for this change to allow for implementing clean-up logic on notification of a failure prior to the retry behavior as well as expressive functional retry logic. 
This doesn't follow the normal pattern of operators using either `create` or `lift`. Why does this need to be done differently?