Revert "pool: Revert change to ListenableFuture"

This reverts commit 22075efe9d1fe2f4e51e7156e80db932209da55d.

I committed the wrong version of the patch.
pool: Revert change to ListenableFuture

Commit d180e90c3a56710797b239d80dcf396bd13b6f7c replaced the use of the
CompletionHandler interface with Guava's ListenableFuture.  The motivation for
this change was that CompletionHandler is an interface for async I/O in NIO 2
as thus isn't intended as a generic callback interface for async operations in
general. Future and ListenableFuture on the other hand are.

I have however discovered that ListenableFuture is seriously flawed when used
for Movers like I did. When a Future is cancelled, it immediately transitions
to the cancelled state and its get method will throw CancellationException. If
the task is already running, it will not wait for the task to complete before
considering the Future to be in a final state. When extended with listeners in
Guava, these semantics are inherited. Ie. as soon as the ListenableFuture is
cancelled, any listeners are invoked with a failure even though the mover has
not yet terminated. One consequence of that is that we would invoke post
processing even though the mover is still running.

Although I don't like the use of CompletionHandler for this use, I decided to
revert the code back to using CompletionHandler - at least until a better
solution is found. For consistency I use the same interface for the post
processing.

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