I am not really pleased with this, it makes code very subtle (`if self.average is not False` is not the same as `if self.average`) However, the semantics is: `average=0` means "wait 0 iters then average", so it's the same as `average=True`.

However I'll probably refactor the logic when implementing the negative values.