make Topology::getAssocs return association sets

Change return type:

```
-std::unordered_map<std::string, std::vector<Association>>
+std::unordered_map<std::string, std::set<Association>>
```

Recall
```
using Association = std::tuple<std::string, std::string, std::string>;
```

The change makes the association code more robus as adding an
association to the set multiple times is supported and cannot cause
issues later on.

Also fix the tests which assumed some ordering of the associations
returned by the function.

Tested: Topology Unit Tests pass.

There is one call site in non-test code:
```
src/entity_manager/entity_manager.cpp
91:         topology.getAssocs(newBoards))
```

which only iterates the destructured map entries and creates DBus
interfaces for association definitions.

Change-Id: Ic4f9eab9935d46384a9581c481dc8fe8274a0592
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/test/test_topology.cpp b/test/test_topology.cpp
index 34c708c..a705e9c 100644
--- a/test/test_topology.cpp
+++ b/test/test_topology.cpp
@@ -146,7 +146,7 @@
 
     EXPECT_EQ(assocs.size(), 1U);
     EXPECT_EQ(assocs[subchassisPath].size(), 1U);
-    EXPECT_EQ(assocs[subchassisPath][0], subchassisAssoc);
+    EXPECT_TRUE(assocs[subchassisPath].contains(subchassisAssoc));
 }
 
 TEST(Topology, BasicPower)
@@ -162,8 +162,8 @@
 
     EXPECT_EQ(assocs.size(), 1U);
     EXPECT_EQ(assocs[subchassisPath].size(), 2U);
-    EXPECT_EQ(assocs[subchassisPath][0], subchassisAssoc);
-    EXPECT_EQ(assocs[subchassisPath][1], powerAssoc);
+    EXPECT_TRUE(assocs[subchassisPath].contains(subchassisAssoc));
+    EXPECT_TRUE(assocs[subchassisPath].contains(powerAssoc));
 }
 
 TEST(Topology, NoNewBoards)
@@ -198,9 +198,9 @@
 
     EXPECT_EQ(assocs.size(), 2U);
     EXPECT_EQ(assocs[subchassisPath].size(), 1U);
-    EXPECT_EQ(assocs[subchassisPath][0], subchassisAssoc);
+    EXPECT_TRUE(assocs[subchassisPath].contains(subchassisAssoc));
     EXPECT_EQ(assocs[subchassisPath + "2"].size(), 1U);
-    EXPECT_EQ(assocs[subchassisPath + "2"][0], subchassisAssoc);
+    EXPECT_TRUE(assocs[subchassisPath + "2"].contains(subchassisAssoc));
 }
 
 TEST(Topology, OneNewBoard)
@@ -219,7 +219,7 @@
 
     EXPECT_EQ(assocs.size(), 1U);
     EXPECT_EQ(assocs[subchassisPath].size(), 1U);
-    EXPECT_EQ(assocs[subchassisPath][0], subchassisAssoc);
+    EXPECT_TRUE(assocs[subchassisPath].contains(subchassisAssoc));
 }
 
 TEST(Topology, 2Superchassis)
@@ -296,9 +296,9 @@
 
         EXPECT_EQ(assocs.size(), 2U);
         EXPECT_EQ(assocs[subchassisPath].size(), 1U);
-        EXPECT_EQ(assocs[subchassisPath][0], subchassisAssoc);
+        EXPECT_TRUE(assocs[subchassisPath].contains(subchassisAssoc));
         EXPECT_EQ(assocs[subchassisPath + "2"].size(), 1U);
-        EXPECT_EQ(assocs[subchassisPath + "2"][0], subchassisAssoc);
+        EXPECT_TRUE(assocs[subchassisPath + "2"].contains(subchassisAssoc));
     }
 
     {
@@ -307,7 +307,7 @@
 
         EXPECT_EQ(assocs.size(), 1U);
         EXPECT_EQ(assocs[subchassisPath + "2"].size(), 1U);
-        EXPECT_EQ(assocs[subchassisPath + "2"][0], subchassisAssoc);
+        EXPECT_TRUE(assocs[subchassisPath + "2"].contains(subchassisAssoc));
     }
 
     {