dlopen() the GSI libraries on linux. #4483

Instead of linking against the GSI libraries for Condor executables, we
now dlopen() them on demand. All calls to GSI libraries are now done via
function pointers, which are set by activate_globus_gsi().
If activate_globus_gsi() returns failure, we must be careful not to use
the function pointers.

In Authentication::handshake() and handshake_continue(), we avoid
selecting GSI authentication if activate_globus_gsi() fails.
Do job proxy operations in a child process of the shadow on linux. #4483

We want to avoid loading the GSI libraries in the shadow process. Thus,
when we need to read the job proxy, fork a quick child process to do the
actual operations. The results of the operation are sent to the main
shadow process via a pipe.
File transfer is already done in a child process, so no change required
there.
Merge remote-tracking branch 'origin/master-gt4483-dlopen_gsi-branch' into V8_3_1-branch
For now, put the explicit .so version numbers into the GSI dlopen code so we don't accidentally pull in the wrong one.  #4483
Only use dlopen for GSI on non-proper builds, since we hard-coded the .so versions.  #4483