blkback: coalesce and parallelise requests

blkback will take a queue of requests from the ring and divide them into
a list of sets, where each set may be issued in parallel while still
providing the illusion that the queue of requests was processed serially.
The rule is that every operation in a set must not depend on the side-effect
of any other operation in the same, or later sets.

 -- this may actually be overkill since the frontend probably assumes that all
    requests on the ring are issued in parallel anyway (otherwise why would
    there be a barrier operation in the protocol?)

blkback will then coalesce the request structures so that requests to read
or write adjacent sectors are merged. blkback will then coalesce the Cstruct.t
buffers which are also adjacent in the processes' address space. This works
nicely when we map the grants in a batch, since the buffers end up in
contiguous addresses.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>