xen, blkfront: gather max-indirect-segments feature only once

The "slow" interaction with the XenBus was performed for each
supported hardware context, while it can be performed only once
as it is a per-block-device characteristic. This commit lets
it be executed only once.
xen, blkfront: avoid request-related calls in blkif_recover

Calls related to the request interface are mainly due to the need
to requeue I/O after recovering. This commit leaves the code still
partially buggy, adding a triple-X comment where it is believed to
be.
xen, blkfront: fixes to xlvbd_release_gendisk

The calls needed to stop and free the request queue were still made
using the request interface. This commit switches to multi-queue
when needed.
xen, blkfront: fixes to blkif_free

The queue was stopped by making use of the request interface. This
commit switches it to multi-queue when needed.
xen, blkfront: implement mapping between hctx and ring

This commit adds a real mapping between hardware context and ring.
The mapping is performed by adding an init_hctx hook to the driver;
the hook stores in the driver_data field of the hardware context
a pointer to the ring associated to it, by using as a key for the
mapping the hardware context index and a simple 1:1 matching.
This commit also lets the hardware context index be stored in the
blkfront_ring_info structure, so that it can be successfully
retrieved when needed.
Note that the interrupt routines don't need to know anything about
the hardware context, as are initialized to carry the pointer to
the ring-related structure they are associated to.
xen, blkfront: add locking around request insertion in blkif_queue_rq

Currently, we are only supporting a single hw context, while allowing
for multiple sw contexts (if the domU has more than one vCPU); with
requests from more ctxs going to the same hctx, we unfortunately have
to lock request insertion.
NOTE: also, as grants are currently per-block-device, one part of the
      request insertion process can possibly involve locking even when
      having a number of hctx matching the number of ctx (which in real
      life is possible, but not sure to be). Future commits will allow
      that locking is completely dropped.