refactor the exponential backoff code into it's own class, add specs for exponential backoff and randomization