host/partitions: avoid calling disks.get_partitions_names() for each partition

Problem:
In PartitionModel.lookup(), it calls disks.get_partitions_names() to
verify the given partition is eligible to be used in a new logical
storage pool as follow.
  if name not in disks.get_partitions_names():
      raise NotFoundError(...)

When the front-end issues GET request to host/partitions, the back-end
would call get_partitions_names() for each partition. If there are many
disks and partitions in the host, get_partitions_names() takes a long
time to finish, and calling get_partitions_names() for each partition
would make the GET request timeout.

In all, the original control flow is as follow.
  GET host/partitions
    Partitions._get_resources()
      PartitionsModel.get_list()
        disks.get_partitions_names()
        for each partition name:
          Partition.lookup()
            PartitionModel.lookup()
              verify partition name in disks.get_partitions_names()
              disks.get_partition_details()

The solution is to split the block device verification code out of
disks.get_partitions_names(), and put it in a new function
disks._is_available(). Now get_partitions_names() just returns
all the block devices, and disks.get_partition_details() can perform
the eligibility check by calling disks._is_available(). The original
get_partitions_names() checks eligibility for all the detected device,
so calling it for each partition is too slow. The new _is_available()
function just checks the given block device.

The New control flow is as follow.
  GET host/partitions
    Partitions._get_resources()
      PartitionsModel.get_list()
        disks.get_partitions_names()
        for each partition name:
          Partition.lookup()
            PartitionModel.lookup()
              disks.get_partition_details()
                check if the block device _is_available()

Signed-off-by: Zhou Zheng Sheng <zhshzhou@linux.vnet.ibm.com>