xen, blkfront: separate request and response rings

This commit is the counterpart of blkback's b6e6832, but unlike that
commit this actually decouples operations performed during request
insertion and the handling of a completion interrupt.
One of the main challenges of such a separation is that both the request
insertion and the interrupt handling path must access per-device data
structures that cannot be duplicated or separated, such as request shadows
and persistent grants. The separation is performed by letting the interrupt
handler defer some operations to the next request insertion, e.g. returning
the request's shadow and the grant to their pools.

NOTE
This commit:
. still has too much duplicated code, e.g. at initialization of request and
  response rings;
. still does not implement backwards compatibility towards previous versions
  of the driver, e.g. drivers that still use a common ring to handle requests
  and responses. This however should be straight-forward given the current
  structure of the code.