PEL: Add a flatten() to Section base class

To prepare for supporting PEL sections that can be in any order,
which will probably be stored in a std::vector<unique_ptr<Section>>,
add a pure virtual function in the Section base class so this list
of sections can just be iterated on and have every object in it
flattened.

This flatten() call replaces the operator<<(Stream&, <object>)
functions currently in use, so also convert the operator>> to
unflatten() to make things consistent.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Id68f16fe4197b389a8495c21539a64f9f583c800
diff --git a/test/openpower-pels/user_header_test.cpp b/test/openpower-pels/user_header_test.cpp
index 52087b6..0f22132 100644
--- a/test/openpower-pels/user_header_test.cpp
+++ b/test/openpower-pels/user_header_test.cpp
@@ -38,7 +38,7 @@
     std::vector<uint8_t> newData;
     Stream newStream(newData);
 
-    newStream << uh;
+    uh.flatten(newStream);
     EXPECT_EQ(*data, newData);
 
     // Change a field, then flatten and unflatten again
@@ -46,7 +46,7 @@
 
     newStream.offset(0);
     newData.clear();
-    newStream << uh;
+    uh.flatten(newStream);
     EXPECT_NE(*data, newData);
 
     newStream.offset(0);