Refs #21228 Resolve the ping concurrency using redis.
Fix typo in redis call
Refs #21228 Added unit tests for ping collision avoidance. Fixed code.
Refs #21228 Differentiate between deployments when using redis server
Refs #21228 Add test for ping_remaining_envelopes. Fix bugs.

Note that the envelopes in the redis hash value are now based on
envelope full path without the protocol://domain/
Production and staging (and devel if any) will log to the same redis
however they will use different databases.
This is configured from buildout.
Porduction is on db 2
Staging is on db 1
and devel, if any is unconfiggured and will go to db 0 as default

Due to redis python bindings library, one cannot change the database from python
 - a redis handler will be bound to the database it has been constructed with.
(this is a good thing)
Refs #21228 Revert to full url in redis store.

We need it when pingging.
Make ping_remaining_envelopes strip protocol and domain in order to
obtain a clean path to use for unrestrictedTraverse
Refs #21228 Fix code to work when called with no request.

We don't have access to the protocol+domain part of the absolute_url in
that case, hence the live code was failing.
Now we reconstruct that part based on the key stored in redis hash var
Add changelog entry
Merge branch '21228_ping_redesign'