pool: Improve robustness of p2p

In pool to pool transfers, the receiving end periodically pings
the sending end to verify that the transfer is still queued. If
the ping fails, the p2p is aborted.

This patch changes the behaviour when the ping times out: A timeout
usually means that the cell connection got lost or some services
are overloaded. In the first case, a new ping should eventually
result in a no-route-to-cell error, or a negative reply from the
source pool if it was restarted. In the second case, aborting the
p2p just leads to it being retried at a higher level, causing a new
p2p to be enqueued, a new source mover to be started, etc, thus
ultimately creating more load.

In either scenario, it is preferrable to retry the ping rather than
aborting the pool to pool transfer.

The patch also addresses the case in which the HTTP URL from the source
mover arrives after the receiving end gave up: In that case we now
try to locate another pool to pool transfer for the same file.

Target: trunk
Require-notes: yes
Require-book: no
Acked-by: Albert Rossi <arossi@fnal.gov>
Patch: http://rb.dcache.org/r/6996/