plugins CHANGE redesign lists of internal extension/type plugins

Prepare the lists of plugins for support of external plugins. Instead of
a statically allocated array, change the API to functions encapsulating
accessing and manipulation with the lists and plugins inside.

So far the lists still contain only the internal plugins, loading
external plugins will be added in a separated commit.
diff --git a/src/plugins_exts.h b/src/plugins_exts.h
index 16bbe0c..6ebe123 100644
--- a/src/plugins_exts.h
+++ b/src/plugins_exts.h
@@ -16,6 +16,7 @@
 #define LY_PLUGINS_EXTS_H_
 
 #include "log.h"
+#include "plugins.h"
 #include "tree_edit.h"
 #include "tree_schema.h"
 
@@ -169,6 +170,20 @@
     lyext_clb_free free;                /**< Free the extension instance specific data created by ::lyplg_ext.compile callback */
 };
 
+struct lyplg_ext_record {
+    /* plugin identification */
+    const char *module;          /**< name of the module where the extension is defined */
+    const char *revision;        /**< optional module revision - if not specified, the plugin applies to any revision,
+                                      which is not an optimal approach due to a possible future revisions of the module.
+                                      Instead, there should be defined multiple items in the plugins list, each with the
+                                      different revision, but all with the same pointer to the plugin functions. The
+                                      only valid use case for the NULL revision is the case the module has no revision. */
+    const char *name;            /**< name of the extension */
+
+    /* runtime data */
+    struct lyplg_ext plugin;     /**< data to utilize plugin implementation */
+};
+
 /**
  * @brief Provide a log message from an extension plugin.
  *