* Rename metadata into field_metadata and move it under util to avoid circular import.
* Add NvmeSettings used to specify nvme disk count.
* Refine PciDevice class for disable and enable PCI devices.
* Add case nvme_max_disk_validation and nvme_sriov_rescind_validation.
* Update import using an easier way.
1. The DiskOptionSettings is used to support disk_type as a set space.
2. Move Disk feature to a member of node space, because it's not an
optional capability for all platforms.
The original design is to plan needed environments for test cases. It
doesn't create the environment candidate, if it looks not necessary. But
as practice, it means to plan it twice. One is to merge equaled
environments, the second is in the real run. It's hard to have
consistent algorithm. So remove the calculation on merging. Each test
result has a candidate, the extra environment won't be deployed.
Some vm size cannot be listed by API, because it's preview. Before this
change, the tests will skip because no vm size. With this change, this
kind of vm_size can run test case, and Azure will raise exception, if
it cannot find the vm size.
* Rename disk_count into data_disk_count and set default value as 0.
* Add min_data_disk_count into test requirement and node schema.
* Add data_disk_caching_type.
* Add data_disk_iops.
* Update template for attaching data disks during provision.
* Split node_requirement from simple_requirement.
* Update UT for simple_requirement.
In some complex combination of test cases, which needs new_env and early
deployment phase, they may be put into the same environments, but
returned later. The extra environments will be deleted in the period,
so the test results cannot be run. With this change, the not deployed
environments won't be deleted until the whole runner completed.