Just always define environ ourselves except on the Mac where we don't
use it.  CMake doesn't actually detect it because it's wrapped in
__USE_GNU in unistd.h, the other platforms don't have it anyway.
Declaring it again doesn't hurt anything so just make things simpler.
Improve the handling of the linker options.
- You can use GCC on the Mac and the current detection will be wrong,
  the issue is the the Mac isn't using a GNU ld, which CMake doesn't
  have a way to detect.
- For our purposes we can do the equivalent of what we were doing with
  -exported_sybmols_list, which should avoid symbol conflicts.