Simple backoff algorithm
This library provides a practical implementation of a backoff algorithm. It
operates by initiating with a minimum delay which is subsequently multiplied
by a factor upon each invocation of 'duration()'. The delay is capped at a
specified maximum threshold. Users can reset the delay to its initial state by
invoking the 'reset()' method. Optionally, 'jitter' can be introduced to
introduce randomness into the delay duration, enhancing resilience against
concurrent retry storms in distributed systems by randomly staggering retry
attempts. This characteristic is particularly useful when establishing
connections, providing a structured approach to handling retries. The backoff
library can be applied in various scenarios such as network communication
attempts, where it communicates with entities like sockets or other network
services.