plugins exts CHANGE ext parsing isolated into a callback

Lots of refactoring and finishing up included.
diff --git a/tests/utests/basic/test_context.c b/tests/utests/basic/test_context.c
index 2340d1e..ad81fb4 100644
--- a/tests/utests/basic/test_context.c
+++ b/tests/utests/basic/test_context.c
@@ -814,7 +814,7 @@
     LY_ARRAY_FOR(ext, u) {
         substmts = ext[u].substmts;
         LY_ARRAY_FOR(substmts, v) {
-            if (substmts && substmts[v].storage && LY_STMT_IS_NODE(substmts[v].stmt)) {
+            if (substmts && substmts[v].storage && (substmts[v].stmt & LY_STMT_DATA_NODE_MASK)) {
                 cnode = *(struct lysc_node **)substmts[v].storage;
                 iter = check;
                 assert_int_equal(LY_SUCCESS, lysc_tree_dfs_full(cnode, check_node_priv_parsed_is_set, &iter));
@@ -833,7 +833,7 @@
     LY_ARRAY_FOR(ext, u) {
         substmts = ext[u].substmts;
         LY_ARRAY_FOR(substmts, v) {
-            if (substmts && substmts[v].storage && LY_STMT_IS_NODE(substmts[v].stmt)) {
+            if (substmts && substmts[v].storage && (substmts[v].stmt & LY_STMT_DATA_NODE_MASK)) {
                 cnode = *(struct lysc_node **)substmts[v].storage;
                 if (cnode) {
                     CHECK_POINTER((struct lysp_node *)cnode->priv, 0);