code: function Backoff(opts) {
      this.minDelay = opts.minDelay || 500;
      this.maxDelay = opts.maxDelay || 15000;
      this.retries = opts.retries;
      this.timeout = opts.timeout;
  
      /* Used for mocking */
      this._timers = opts.timers || require('timers');
      this._random = opts.random || Math.random;
      this._now = opts.timers && opts.timers.now || Date.now;
  
      this.attempt = 0;
      this.firstTry = null;
      this.timer = undefined;
  }
docs: Backoff provides exponential backoff. Every time {Backoff.retry} is called,
  the delay increases exponentially until it reaches maxDelay.
  
  @param {Object} opts The opts
  @param {Number} [opts.minDelay=500] the minimum delay in ms
  @param {Number} [opts.maxDelay=1500] the maximum delay in ms
  @param {Number} [opts.retries] the number of retries
  @param {Number} [opts.timeout] the timeout of retrying in ms
  @param {Number} [opts.timers] mock timers-module during tests
  @param {Number} [opts.random] mock Math.random during tests
  
  @constructor