This removes the use of ctypes
to discover what functions are available. Instead, it uses the same C compiler that Python would end up using to compile the modules in order to build and link tiny test executables and discover if those functions exist.
This also allows for detecting members of structures, so we can safely implement deprecated members.
This breaks our Window's build (temporarily, and only because I can't maintain it).
Any thoughts?