Add semaphore to ML2 create_port db operation
Add semaphore to ML2 create_port db operation

This adds a semaphore scoped to the network ID of a port
creation in ML2 to ensure that all workers on a single server
only try to allocate an IP for that network one at a time.

This will alleviate the deadlock error retry mechanism being
exceeded due to the related bug. It reduces the number of contenders
for a single IP allocation from number of workers to number of servers.

It will unblock the switch to pluggable ipam while the IP allocation
strategy is being revamped to be less racey.

Partial-Bug: #1543094
Change-Id: Ieafdd640777d4654fcd0ebb65ace25c30151c412

cloudbase/neutron,openstack/neutron,eayunstack/neutron,igor-toga/local-snat,mahak/neutron,noironetworks/neutron,noironetworks/neutron,eayunstack/neutron,sebrandon1/neutron,openstack/neutron,mahak/neutron,bigswitch/neutron,mahak/neutron,huntxu/neutron,cloudbase/neutron,sebrandon1/neutron,bigswitch/neutron,igor-toga/local-snat,huntxu/neutron,openstack/neutron