MSVC: handle symbol visibility

On MSVC, the exported symbols have to be marked both in the header and
in the implementation as dllexport, whereas on GCC the visibility=normal
attribute is only supposed to be used in the implementation. As a
result, we need two types of macros here, one for the public headers,
and the other for TUs with implementation. Also, the symbol name cannot
be generic ("API") because we only want to mark as dllexport those
symbols which are in a library that we're building *now*. Otherwise this
will break havoc in any libraries which also use the `ABI` macro *and*
also use libyang.
diff --git a/src/plugins_exts.c b/src/plugins_exts.c
index 18c9250..90fc70a 100644
--- a/src/plugins_exts.c
+++ b/src/plugins_exts.c
@@ -27,37 +27,37 @@
 #include "printer_internal.h"
 #include "schema_compile.h"
 
-API struct ly_ctx *
+LIBYANG_API_DEF struct ly_ctx *
 lysc_ctx_get_ctx(const struct lysc_ctx *ctx)
 {
     return ctx->ctx;
 }
 
-API uint32_t *
+LIBYANG_API_DEF uint32_t *
 lysc_ctx_get_options(const struct lysc_ctx *ctx)
 {
     return &((struct lysc_ctx *)ctx)->compile_opts;
 }
 
-API const char *
+LIBYANG_API_DEF const char *
 lysc_ctx_get_path(const struct lysc_ctx *ctx)
 {
     return ctx->path;
 }
 
-API struct ly_out **
+LIBYANG_API_DEF struct ly_out **
 lys_ypr_ctx_get_out(const struct lyspr_ctx *ctx)
 {
     return &((struct lyspr_ctx *)ctx)->out;
 }
 
-API uint32_t *
+LIBYANG_API_DEF uint32_t *
 lys_ypr_ctx_get_options(const struct lyspr_ctx *ctx)
 {
     return &((struct lyspr_ctx *)ctx)->options;
 }
 
-API uint16_t *
+LIBYANG_API_DEF uint16_t *
 lys_ypr_ctx_get_level(const struct lyspr_ctx *ctx)
 {
     return &((struct lyspr_ctx *)ctx)->level;