Fixes issue with dllimport inline on non Microsoft compilers for WIN32

dllimport inlining is only supported on Microsoft compilers.  Specifically, MinGW 32 does not support this feature.  This patch deals with the issue as gracefully as possible while maintains as much compatibility and feature support as possible.  It still works for MS compilers, but importing from a DLL for MinGW 32 inlines the function or includes its own instance of the method rather than importing the DLL method when it can not be inlined.

MS compilers will not create their own instanced of the method if it can be inlined and instead will refer to the instance in the DLL.