networkd: add Cisco UCS enic workaround check

When on the Linux bridge backend and when the "enic" driver is loaded, we need
to apply a workaround (implemented in the following commit).

The enic driver is for Cisco UCS devices. The current driver adds VLAN0 headers
to all incoming packets, which confuses certain guests OSes.  The workaround
constitutes added a VLAN0 Linux device to strip those headers again.

The patch moves the "backend_kind" ref outside the Bridge module, and adds an
"need_enic_workaround" function.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
CA-115557: networkd: implement enic workaround

When the enic workaround needs to be applied (according to the check
implemented in the previous commit), then when asked to add an interface to a
bridge, create a VLAN0 device for the given interface, and add that to the
bridge instead. This applies to bonded interfaces as well as individual ones
(we simply add the VLAN0 device on top of the bond device).

Also, in Interface.make_config, we need to take care to configure both the base
device as well as the VLAN0 device with the same parameters.

Finally, when destroying a bridge with a VLAN0 bond, we need to destroy the
bond device as well.

Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Merge pull request #1956 from robhoes/ucs2

CA-115557: networkd: implement enic workaround