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/schema_features.c b/src/schema_features.c
index 28830a6..2189046 100644
--- a/src/schema_features.c
+++ b/src/schema_features.c
@@ -84,7 +84,7 @@
     return LY_ENOT;
 }
 
-API LY_ERR
+LIBYANG_API_DEF LY_ERR
 lysc_iffeature_value(const struct lysc_iffeature *iff)
 {
     size_t index_e = 0, index_f = 0;
@@ -97,7 +97,7 @@
     return LY_ENOT;
 }
 
-API LY_ERR
+LIBYANG_API_DEF LY_ERR
 lys_identity_iffeature_value(const struct lysc_ident *ident)
 {
     LY_ARRAY_COUNT_TYPE u, v;
@@ -141,7 +141,7 @@
     return LY_SUCCESS;
 }
 
-API struct lysp_feature *
+LIBYANG_API_DEF struct lysp_feature *
 lysp_feature_next(const struct lysp_feature *last, const struct lysp_module *pmod, uint32_t *idx)
 {
     struct lysp_feature *features;
@@ -211,7 +211,7 @@
     return NULL;
 }
 
-API LY_ERR
+LIBYANG_API_DEF LY_ERR
 lys_feature_value(const struct lys_module *module, const char *feature)
 {
     const struct lysp_feature *f;