gremlin-go: fix deadlock on (*DriverRemoteConnection).Close
gremlin-go: fix deadlock on (*DriverRemoteConnection).Close

Fix a deadlock when a remote connection is closed and, at the same time, the
connection fails. The following call graphs illustrate the issue:

goroutine run by main:

(*DriverRemoteConnection).Close
  (*Client).Close
    (*loadBalancingPool).close
      (*connection).close
        (*gremlinServerWSProtocol).close
          (*WaitGroup).Wait

gremlin-go's readLoop goroutine:

(*gremlinServerWSProtocol).readLoop
  readErrorHandler
    (*connection).errorCallback-fm
      (*connection).errorCallback
        (*gremlinServerWSProtocol).close
          (*WaitGroup).Wait
  (*WaitGroup).Done

protocol.closed is only modified by (*gremlinServerWSProtocol).close. If it is
true it means that (*WaitGroup).Wait has already been called, so it should not
be called again.

apache/tinkerpop,apache/tinkerpop,apache/tinkerpop,apache/tinkerpop,apache/tinkerpop,apache/tinkerpop,apache/tinkerpop