Added public API visibility macros

As the title says, this adds public API visibility macros, which should help the Windows build to be more straightforward, namely no need to maintain the separate .def file with exports which is usually out-of-sync with the latest revisions. 

In the future, this could also be used to control visibility with GCC/Clang so there would be no need for MONO_INTERNAL (while changing the default visibility to hidden).

I verified all of the symbols of the compiled DLL in Windows vs. the .def file listing and it exports all the APIs that were previously exported (plus a handful new ones that have been introduced).

If no one objects, I will send another pull removing the .def and related files and re-doing a bit of the Windows build scripts.