config_parser: Rewrite file parsing logic

This grealty improves the correctness of the config parser to
better match the way systemd parses config files. It also allows us to
provide errors / warnings when the file format doesn't match
expectations.

Tested: On an existing BMC system to verify NTP / DHCP settings were
still parsed as expected.

Change-Id: I1f0cb631f680f5957a29accaa749d491e6f68faf
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/test_config_parser.cpp b/test/test_config_parser.cpp
index ec90a5f..a49b23e 100644
--- a/test/test_config_parser.cpp
+++ b/test/test_config_parser.cpp
@@ -51,6 +51,9 @@
     EXPECT_THAT(parser.getValues("Match", "Name"), ElementsAre("eth0"));
     EXPECT_THAT(parser.getValues("DHCP", "ClientIdentifier"),
                 ElementsAre("mac"));
+    EXPECT_THAT(parser.getValues("Network", "DHCP"),
+                ElementsAre("true", "false #hi", "yes"));
+    EXPECT_THAT(parser.getValues(" SEC ", "'DHCP#'"), ElementsAre("\"#hi\""));
     EXPECT_THAT(parser.getValues("Blah", "nil"), ElementsAre());
     EXPECT_THAT(parser.getValues("Network", "nil"), ElementsAre());
 }