text: Title: Race condition when connecting with the same websockets transport twice at the same time
  Body: Hi @leszekhanusz ,
  
  First of all, thanks again for implementing the subscription part, that's great!
  
  I still get some issues to set up multiple subscriptions and I'm not sure how to solve this. Consider taking your example: https://github.com/graphql-python/gql/blame/master/README.md#L318-L342
  
  Can you confirm me that about subscriptions the `asyncio.create_task(...)` will immediately run the function in another thread, and that all the `await taskX` is to remain the program blocking until each task finishes?
  
  On my side even with your example I get this random error (it's not immediate, sometimes after 1 second, sometimes 10...):
  ```
  RuntimeError: cannot call recv while another coroutine is already waiting for the next message
  ```
  
  The message is pretty explicit but I don't understand how to bypass this 😢 
  
  If you have any idea 👍 
  
  Thank you,
  
  EDIT: that's weird because sometimes without modifying the code, the process can run more than 5 minutes without having this error...
  
  EDIT2: Note that sometimes I also get this error about the `subscribe(...)` method
  ```
      async for r in self.ws_client.subscribe(subscriptions['scanProbesRequested']):
  TypeError: 'async for' requires an object with __aiter__ method, got generator
  ```
  
  EDIT3: If I use a different way of doing async (with the same library)
  ```
  try:
          loop = asyncio.get_event_loop()
          task3 = loop.create_task(execute_subscription1())
          task4 = loop.create_task(execute_subscription2())
          loop.run_forever()
  ```
  it works without any error. That's really strange...