libyang FEATURE sorting of data nodes

1. Plugin type 'lyds_tree' is integrated. Used in metadata and it is
internal, which is distinguished by the unset print callback.
Internal metadata must not be printed.
2. Leaf-list and list data instances are now automatically sorted.
3. Both the explicit and implicit YANG statement 'ordered-by system'
will cause the nodes to be ordered.
4. The first instance of the list or leaf-list of node contain
new metadata named 'lyds_tree'.
5. Data nodes are sorted only if their data types have
callback 'sort' set.
6. Sorting can be turned off so far only by adding the 'ordered-by user'
statement to the YANG model.
7. If the sort fails for some reason, the node is still inserted
as the last instance. A warning message informs about this situation.
8. The time required for sorting should be relatively small thanks to
the Red-black tree implementation.
9. Memory requirements will now increase by 40 bytes per list/leaf-list
data node, plus metadata structure overhead.
10. New internal lyds_tree plugin type.
diff --git a/src/out.c b/src/out.c
index a37bc94..9eed077 100644
--- a/src/out.c
+++ b/src/out.c
@@ -29,6 +29,7 @@
 #include "compat.h"
 #include "log.h"
 #include "ly_common.h"
+#include "metadata.h"
 #include "printer_data.h"
 #include "tree_data.h"
 #include "tree_schema.h"
@@ -89,6 +90,21 @@
     return 1;
 }
 
+LIBYANG_API_DEF ly_bool
+lyd_metadata_should_print(const struct lyd_meta *meta)
+{
+    const char *arg;
+
+    assert(meta->annotation);
+
+    arg = meta->annotation->argument;
+    if (!strcmp(arg, "lyds_tree")) {
+        return 0;
+    } else {
+        return 1;
+    }
+}
+
 LIBYANG_API_DEF LY_OUT_TYPE
 ly_out_type(const struct ly_out *out)
 {