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

Rebase and clean up of #1326 while Aaron is at LambdaJam.
Why is this `IllegalArgumentException` check being removed?