Generic hardware driver interface for Quantum Plugins

This patch describes a generic hardware driver interface which may be used within
the Quantum Plugins which will enable support for different hardware backends
for L2 network segregation (VLANs, tunneling, etc.). Currently only the
OVSPlugin has been modified to use this hardware driver interface, but in future
other plugins may be able to use this interface.

This may be useful for existing data centers with hardware switches which needs
to be used along with Openstack infrastructure. In this case a hardware vendor
may introduce a hardware driver which will allow using vendor's hardware to be
used within Openstack, along with virtual switches to provide L2 network
segregation.

This will allow automatic L2 network provisioning on the hardware devices
alongside with the Vswitch provisioning in the compute node hypervisors.

This diff also includes the source code for an Arista Driver which supports
provisioning of Arista TOR (top-of-the-rack) switches alongside with open
vswitches.

There is a related one line change needed in nova/network/quantumv2/api.py,
allocate_for_instance() to pass the hostname on which the instance was started to
Quantum create_port().

Implements: blueprint ovsplugin-hardware-devices
Change-Id: Ibccb032a433a81d9facdadce04840841ee4b0c20