pool: Use ListenableFuture rather than CompletionHandler

The pool queuing and mover wrapping code relies on the
CompletionHandler interface from the NIO 2 async code.
This interface is a poor fit for our needs as it doesn't
provide means of cancelling the result (which means we
had to add a custom Cancellable interface) and has
features like attachables, that we don't need.

The Guava ListenableFuture - an extension of the regular
JDK Future concept - fits our needs much better. This
patch refactors the code to use ListenableFuture and this
allows custom cancellation code to be removed, and also
stream lines the code a bit.

The patch moves some error handling from SimpleIoScheduler
to PoolIORequest. The code was tightly coupled to
PoolIORequest anyway and fits more naturally inside that
class.

The patch is part of a series of pathes to clean up the
pool mover handling.

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