VOL-2339: DHCP issue on second ONU, when two ONUs exist on same PON

- Process to_remove before to_add items in UpdateFlowsIncrementally
  method
- Sequentially add flows for a given pon, onu, uni inorder to avoid
  PON resource collisions. Used lock per key so that different
  subscribers do not have to wait for each other to add flows.
- Wait for any flow removes for the subscriber to complete before
  adding flows.

Change-Id: I095291b9a53fd0f19dc79f2b44923ec786a26d6e
diff --git a/adaptercore/device_handler.go b/adaptercore/device_handler.go
index 7e09fc8..9c65cee 100644
--- a/adaptercore/device_handler.go
+++ b/adaptercore/device_handler.go
@@ -1081,14 +1081,15 @@
 func (dh *DeviceHandler) UpdateFlowsIncrementally(device *voltha.Device, flows *of.FlowChanges, groups *of.FlowGroupChanges, flowMetadata *voltha.FlowMetadata) error {
 	log.Debugw("Received-incremental-flowupdate-in-device-handler", log.Fields{"deviceID": device.Id, "flows": flows, "groups": groups, "flowMetadata": flowMetadata})
 	if flows != nil {
-		for _, flow := range flows.ToAdd.Items {
-			log.Debug("Adding flow", log.Fields{"deviceId": device.Id, "flowToAdd": flow})
-			dh.flowMgr.AddFlow(flow, flowMetadata)
-		}
 		for _, flow := range flows.ToRemove.Items {
 			log.Debug("Removing flow", log.Fields{"deviceId": device.Id, "flowToRemove": flow})
 			dh.flowMgr.RemoveFlow(flow)
 		}
+
+		for _, flow := range flows.ToAdd.Items {
+			log.Debug("Adding flow", log.Fields{"deviceId": device.Id, "flowToAdd": flow})
+			dh.flowMgr.AddFlow(flow, flowMetadata)
+		}
 	}
 	if groups != nil && flows != nil {
 		for _, flow := range flows.ToRemove.Items {