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

Rebase and clean up of #1326 while Aaron is at LambdaJam.
Why does this use static factory methods which is against the pattern used by every other operator?