Add yang-cli

The original idea for this was that I would libyang C++ bindings for
this. Unfortunately, there have been problems with them as explained
here: https://github.com/CESNET/libyang/issues/1106. The easiest
solution to this was to just use the C api of libyang. After creating
some safe wrappers around pointers, it wasn't too difficult.

Change-Id: I0421cb64df66c640956501e56ffc4122eef0b9b7
diff --git a/src/datastore_access.hpp b/src/datastore_access.hpp
index 0856d41..29253ce 100644
--- a/src/datastore_access.hpp
+++ b/src/datastore_access.hpp
@@ -23,7 +23,7 @@
     std::string message;
     std::optional<std::string> xpath;
 
-    DatastoreError(const std::string& message, const std::optional<std::string>& xpath);
+    DatastoreError(const std::string& message, const std::optional<std::string>& xpath = std::nullopt);
 };
 
 class DatastoreException : std::exception {