Make backoff strategy replaceable

This patch allows us to replace the backoff strategy with an user-defined one. I've also added some predefined strategies.

A motivating example would be as follows:

```haskell
capped :: Int -> (Int -> Int -> Int) -> Int -> Int -> Int
capped maxDelay backoff base n = backoff base n `min` maxDelay

testSettings :: RetrySettings
testSettings = def
  { backoff = capped (10^6) exponentialBackoff
  }
```