text: Title: Update websockets implementation for 3.11
  Body: To make the websocket implementation 3.11 compat, we need to remove the deprecated usage of `asyncio.wait` here:  https://github.com/sanic-org/sanic/blob/4a416e177aa5037ba9436e53f531631707e87ea7/sanic/server/websockets/impl.py#L521
  
  
  ---
  
  thank you both 
  
  @ahopkins - We also get this warning in the error logs when using websockets:
  
      DeprecationWarning: The explicit passing of coroutine objects to asyncio.wait() is deprecated since Python 3.8, and scheduled for removal in Python 3.11.  done, pending = await asyncio.wait(
  
  Is this from the websockets package?
  
  _Originally posted by @vgoklani in https://github.com/sanic-org/sanic/issues/2371#issuecomment-1013105803_
  
  @vgoklani 
  
  > Is this from the websockets package?
  
  This is separate and should probably be opened as a new issue. It should be a simple fix:
  
  ```python
              self.recv_cancel = asyncio.Future()
              tasks = (
                  self.recv_cancel,
                  # NEXT LINE IS THE CHANGE NEEDED
                  # TO EXPLICITLY CREATE THE TASK
                  asyncio.create_task(self.assembler.get(timeout)),
              )
              done, pending = await asyncio.wait(
                  tasks,
                  return_when=asyncio.FIRST_COMPLETED,
              )
  ```
  
  _Originally posted by @ahopkins in https://github.com/sanic-org/sanic/issues/2371#issuecomment-1013822496_