Fix persisted config data generating different hashes and tags not being persisted

Data loaded from the key value store could generate different hashes depending on the order python decides to give us keys back
Everytime tags are updated, push the tag to the datastore if one is provided and properly load the tags back

Change-Id: I148c01b13009a038187c4aeec3080b105a7d8956
diff --git a/voltha/core/config/config_node.py b/voltha/core/config/config_node.py
index b588808..cba6d88 100644
--- a/voltha/core/config/config_node.py
+++ b/voltha/core/config/config_node.py
@@ -471,6 +471,7 @@
         branch = self._branches[None]  # tag only what has been committed
         rev = branch._latest if hash is None else branch._revs[hash]
         self._tags[tag] = rev
+        self.persist_tags()
         return self
 
     @property
@@ -490,10 +491,12 @@
 
     def delete_tag(self, tag):
         del self._tags[tag]
+        self.persist_tags()
 
     def delete_tags(self, *tags):
         for tag in tags:
             del self._tags[tag]
+        self.persist_tags()
 
     def prune_untagged(self):
         branch = self._branches[None]
@@ -504,6 +507,11 @@
                 del branch._revs[hash]
         return self
 
+    def persist_tags(self):
+        """
+        Persist tag information to the backend
+        """
+
     # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Internals ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
     def _test_no_children(self, data):