Do not insert or delete default action entries in P4Runtime

Spec says:
the default entry for a table is always set. It can be set at
compile-time by the P4 programmer - or defaults to NoAction (which is a
no-op) otherwise - and assuming it is not declared as const, can be
modified by the P4Runtime client. Because the default entry is always
set, we do not allow INSERT and DELETE updates on the default entry and
the P4Runtime server must return an INVALID_ARGUMENT error code if the
client attempts one.

With this patch we convert insert or delete operations into modify ones
(unless specified by a driver property, to support non-compliant devices).
For delete, we use the interpreter to suggest a default action that is
the same as the one when the pipeline was originally deployed.

Also, we introduce the capability of synchronizing the device mirror
with the device state.

Change-Id: I3758fc11780eb0f1cf4ed5a295bd98b54b182e29
diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java
index ba66c10..f7ba1bd 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiTableModel.java
@@ -42,8 +42,9 @@
     PiTableType tableType();
 
     /**
-     * Returns the model of the action profile that implements this table. Meaningful if this table is of type {@link
-     * PiTableType#INDIRECT}, otherwise returns null.
+     * Returns the model of the action profile that implements this table.
+     * Meaningful if this table is of type {@link PiTableType#INDIRECT},
+     * otherwise returns null.
      *
      * @return action profile ID
      */
@@ -92,16 +93,19 @@
     Collection<PiActionModel> actions();
 
     /**
-     * Returns the model of the default action associated with this table, if any.
+     * Returns the model of the constant default action associated with this
+     * table, if any.
      *
      * @return optional default action model
      */
-    Optional<PiActionModel> defaultAction();
+    Optional<PiActionModel> constDefaultAction();
 
     /**
-     * Returns true if the default action has mutable parameters that can be changed at runtime, false otherwise.
+     * Returns true if the default action has mutable parameters that can be
+     * changed at runtime, false otherwise.
      *
-     * @return true if the default action has mutable parameters, false otherwise
+     * @return true if the default action has mutable parameters, false
+     * otherwise
      */
     boolean hasDefaultMutableParams();
 
@@ -114,8 +118,8 @@
     boolean isConstantTable();
 
     /**
-     * Returns the action model associated with the given ID, if present. If not present, it means that this table does
-     * not support such an action.
+     * Returns the action model associated with the given ID, if present. If not
+     * present, it means that this table does not support such an action.
      *
      * @param actionId action ID
      * @return optional action model
@@ -123,8 +127,9 @@
     Optional<PiActionModel> action(PiActionId actionId);
 
     /**
-     * Returns the match field model associated with the given ID, if present. If not present, it means that this table
-     * does not support such a match field.
+     * Returns the match field model associated with the given ID, if present.
+     * If not present, it means that this table does not support such a match
+     * field.
      *
      * @param matchFieldId match field ID
      * @return optional match field model