Enhance PCI whitelist

While keeping the existing PCI passthrough functionality intact, this patch
makes the following enhancements:

* allows aggregated declaration of PCI devices by using '*' and '.'
* allows tags to be associated with PCI devices.

A whitelist entry is defined as:
["device_id": "<id>",] ["product_id": "<id>",]
["address": "[[[[<domain>]:]<bus>]:][<slot>][.[<function>]]" |
"devname": "Ethernet Interface Name",]
"physical_network":"name string of the physical network"

<id> can be a '*' or a valid device/product id as displayed by the linux
utility lspci. The address uses the same syntax as it's in lspci. Refer to
lspci's manual for its description about the '-s' switch. The devname can be
a valid PCI device name. The only device names that are supported in this
specification are those that are displayed by the linux utility ifconfig -a
and correspond to either a PF or a VF on a vNIC. There may be 0 or more tags
associated with an entry.

If the device defined by the address or devname corresponds to a SR-IOV PF,
all the VFs under the PF will match the entry.
For SR-IOV networking, a pre-defined tag "physical_network" is used to define
the physical network that the devices are attached to.

Multiple whitelist entries per host are supported as they already are. The
fields device_id, product_id, and address or devname will be matched
against PCI devices that are returned as a result of querying libvirt.

Change-Id: I96e3e0174fa79ef9dd0ffbec172ba1c0420a37f8
Partially Implements: blueprint pci-passthrough-sriov
Merge "Enhance PCI whitelist"