The previous situation is unfortunately not sustainable; header pollution
isn't consistent across all non-Windows platforms. As a result, some of
the earlier includes may pull functions/types into the global namespace too
soon, and the later includes will have no visibility of them because they're
in a different namespace. Re-including the necessary one doesn't work
because include guards will prevent their re-inclusion, and it's not a good
idea to try and #undefine include guards now that we're in a new namespace.
This fixes the build on FreeBSD, and likely some other systems as well.