!per #3761 Reliable channels

- Built-in redelivery mechanism for Channel and PersistentChannel
- redelivery counter on ConfirmablePersistent
- redeliveries out of initial message delivery order
- relative order of redelivered messages is preserved
- configurable redelivery policy (ChannelSettings)
- Major refactorings of channels (and channel tests)
- Throughput load test for PersistentChannel

Todo:

- User docs (Scala, Java)
- Paged/throtlled replay (maybe another pull request)
- Resequencer (maybe another pull request)

Out of scope:

- Watching destinations (as destinations are managed by application and not by channel)
- Negative confirmation (because this is the same as no confirmation after timeout)