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/tree_data_free.c b/src/tree_data_free.c
index 3927091..188b52c 100644
--- a/src/tree_data_free.c
+++ b/src/tree_data_free.c
@@ -24,6 +24,7 @@
 #include "tree.h"
 #include "tree_data.h"
 #include "tree_data_internal.h"
+#include "tree_data_sorted.h"
 #include "tree_schema.h"
 
 static void
@@ -222,7 +223,6 @@
     } else if (node->schema->nodetype & LYD_NODE_INNER) {
         /* remove children hash table in case of inner data node */
         lyht_free(((struct lyd_node_inner *)node)->children_ht, NULL);
-        ((struct lyd_node_inner *)node)->children_ht = NULL;
 
         /* free the children */
         LY_LIST_FOR_SAFE(lyd_child(node), next, iter) {
@@ -286,6 +286,7 @@
 
         /* in case of the top-level nodes (node->parent is NULL), no unlinking needed */
         if (iter->parent) {
+            lyds_free_metadata(iter);
             lyd_unlink(iter);
         }
         lyd_free_subtree(iter);