Add handler method to process websocket connections
<!--- Provide a general summary of your changes in the title above. -->

Allow an application to process the connection request for `graphql_transport_ws` and `graphql_ws`
protocols, perform authentication, reject a connection and return custom response payload

<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->

## Description

A previous PR, #2380 added support for `connection_params`.  However, they were simply taken as provided and
injected into the _context_ object.  This PR adds an overridable hook in the `AsyncBaseHTTPView`, `on_ws_connect()`
which allows an application to examine the connection parameters when a connection is made.
The method receives an `WSConnectionParams` object, `params`.
The application can then

- choose to reject the connection (by calling `params.reject()`)
- add additional information into the `params.connection_params` or modify it.
- set `params.rsponse_params` to return a _payload_ to the client.

This is based on similar behaviour in the reference implementation for `graphql_transport_ws`, namely
this code here:
https://github.com/enisdenjo/graphql-ws/blob/972ed07ea263624bb556970cfd85bb05ea2c6eac/src/server.ts#L614
except that we use a parameter object to operate on.

This approach allows us to split **authentication** and **authorization** into two steps.   Authentication can be done when establishing connection and authorization can be performed for each resolver.

Documentation is modified and also a piece added about how to perform authentication for _single result operations_ (queries and mutations) since they can be invoked both via http and websockets.

<!--- Describe your changes in detail here. -->

## Types of Changes

<!--- What types of changes does your pull request introduce? Put an `x` in all the boxes that apply. -->
- [x] Core
- [ ] Bugfix
- [ ] New feature
- [x] Enhancement/optimization
- [x] Documentation

## Issues Fixed or Closed by This PR

*

## Checklist

<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [x] My code follows the code style of this project.
- [x] My change requires a change to the documentation.
- [x] I have updated the documentation accordingly.
- [x] I have read the CONTRIBUTING document.
- [x] I have added tests to cover my changes.
- [x] I have tested the changes and verified that they work and don't break anything (as well as I can manage).

No standard way to intercept the "connect" websockets message
### Discussed in https://github.com/strawberry-graphql/strawberry/discussions/1640

<div type='discussions-op-text'>

<sup>Originally posted by **kristjanvalur** February 13, 2022</sup>
...
Alternatively, is there a way to intercept and handler the `connection_init` message and either accept or reject the conneciton based on the request headers (from the original connection) or the optional `payload` and attach custom data to the resulting `connection` object?

Basically, I'm searching for the canonical way to do request authentication and authorization when working with requests that arrive via the `graphql-transport-ws` transport, be they subscriptions, mutations or queries.

Cheers!</div>

<!-- POLAR PLEDGE BADGE START -->
## Upvote & Fund

- We're using [Polar.sh](https://polar.sh/strawberry-graphql) so you can upvote and help fund this issue.
- We receive the funding once the issue is completed & confirmed by you.
- Thank you in advance for helping prioritize & fund our backlog.

<a href="https://polar.sh/strawberry-graphql/strawberry/issues/1703">
<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://polar.sh/api/github/strawberry-graphql/strawberry/issues/1703/pledge.svg?darkmode=1">
  <img alt="Fund with Polar" src="https://polar.sh/api/github/strawberry-graphql/strawberry/issues/1703/pledge.svg">
</picture>
</a>
<!-- POLAR PLEDGE BADGE END -->

Add hook functions, process_connection_payload()
This PR adds a hook funciton in to the websocket handlers, `process_connection_payload()` which can
be customized to validate/proecss the payload sent with the `connection_init` message and
provide a payload to return with the `connection_ack` response.

This allows validation of conneciton payload, as well as to pro
## Types of Changes

<!--- What types of changes does your pull request introduce? Put an `x` in all the boxes that apply. -->
- [ ] Core
- [ ] Bugfix
- [x] New feature
- [ ] Enhancement/optimization
- [ ] Documentation

## Issues Fixed or Closed by This PR

See discussion #1640
and issue #1702

## Checklist

<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [x] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [x] I have read the CONTRIBUTING document.
- [ ] I have added tests to cover my changes.
- [x] I have tested the changes and verified that they work and don't break anything (as well as I can manage).