Make sure to wait on all ReadV/Read responses.

If we returned before all Read responses (say, if the first read
response threw an exception), then the last response to come in
could access the RequestManager on failure.  Because the first
response was an error, the RequestManager was already destroyed -
leading to a segfault.
Close files asynchronously.

Previously, we waited for the remote server to acknowledge a file
close; poorly-performing servers can even timeout when doing this.

As we ignored the response to the file close (possibly issuing a
warning), we can do this asynchronously in a Xrootd thread.
Nail down object lifetime management for the OpenHandler.

Finally fix up lifetime management issues for the OpenHandler.  The
OpenHandler may outlive its parent RequestManager (as we can't cancel
the in-progress open when the XrdFile opens); therefore:
1) The OpenHandler needs to keep a reference to its own shared_ptr alive
   for as long as the callback is outstanding.
2) The OpenHandler needs a weak_ptr to the RequestManager in order to
   determine whether it is safe to report its results back to the
   manager (or ignore them).

Now, for the XrdAdaptor,
- File opens and closes in the XrdCl are fully asynchronous - their
  lifetime may extend past the life of the corresponding XrdFile object.
- Read(V) requests are synchronous; when the XrdFile::Read(V) call returns
  (or throws an exception), we are guaranteed there's no outstanding requests.
Make sure to drain outstanding readv's before checking results.
Workaround Xrootd IPv6 bug.

Because we link against libXrdClient (which forces IPv6-only), we
must explicitly set the IP stack.  *However*, setting IPAuto doesn't
actually reset all of the client internals.  We must call XrdNetUtils
directly.
Merge pull request #6546 from bbockelm/xrootd-fix-ipv6

Xrootd fix ipv6