Factored out IReconnectionWaiter, Recursive->Iter

1) Factored out IReconnectionWaiter, just to have ability to customize
reconnection inverval strategy. Now we have FixedDelayWaiter and
ExponentialBackoffWaiter. Default is ExponentialBackoffWaiter.
2) Small changes in PersistentChannel. Now invoking channelAction
happens in a loop instead of recursion call. Recursion can be bad if
FixedDelayWaiter with small delay will be used.