cells: Let CellPath#revert return a copy

CellPath#revert reverts the path inline. In almost all
cases this means one should clone the CellPath object
before reverting it.

This patch updates revert to return a reverted copy of
the path rather than modifying the path itself. This
protects against accidentally modifying shared cell
path.

The patch also modifies CellMessage to clone the injected
CellPath. This too is to avoid that shared CellPath objects
get modified.

Targe: trunk
Require-book: no
Require-notes: no
Acked-by: Paul Millar <paul.millar@desy.de>
Patch: http://rb.dcache.org/r/5393/
pool: Add Mover interface

A new interface, Mover, is introduced and implemented by the PoolIOTransfer
class. The pool uses PoolIOTransfer to represent a transfer in the pool. In
the UI we usually refer to this entity as "the mover" (it is this object
that we queue and kill, not the legacy MoverProtocol).

The change should be reviewed bearing in mind that I want to get rid of
the dependency on the MoverProtocol interface.

Target: trunk
Require-book: no
Require-notes: no
Acked-by: Paul Millar <paul.millar@desy.de>
Patch: http://rb.dcache.org/r/5436/