### Description

Authentication using OAuth for Databricks Service Principals is now in Public Preview.  I would like to implement this into the Databricks Hook.   By adding "service_principal_oauth" as a boolean value set to `true` in the extra configuration, the Client Id and Client Secret can be supplied as a username and password.

https://docs.databricks.com/dev-tools/authentication-oauth.html

### Use case/motivation

Before Authentication using Oauth the only way to use the Databricks Service Principals was by another user account performing a token request on-behalf of the Service Principal.  This process is difficult to utilize in the real world, but this new way of collecting access tokens changes the process and should make a big difference.

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

"client_id": self.databricks_conn.login,
                            "resource": resource,
                            "client_secret": self.databricks_conn.password,
                        }
                        azure_ad_endpoint = self.databricks_conn.extra_dejson.get(
                            "azure_ad_endpoint", AZURE_DEFAULT_AD_ENDPOINT
                        )
                        async with self._session.post(
                            url=AZURE_TOKEN_SERVICE_URL.format(azure_ad_endpoint, tenant_id),
                            data=data,
                            headers={
                                **self.user_agent_header,
                                "Content-Type": "application/x-www-form-urlencoded",
                            },
                            timeout=self.aad_timeout_seconds,
                        ) as resp:
                            resp.raise_for_status()
                            jsn = await resp.json()
                    if (
                        "access_token" not in jsn
                        or jsn.get("token_type") != "Bearer"
                        or "expires_on" not in jsn
                    ):
                        raise AirflowException(f"Can't get necessary data from AAD token: {jsn}")
                    token = jsn["access_token"]
                    self.aad_tokens[resource] = {"token": token, "expires_on": int(jsn["expires_on"])}
                    break
        except RetryError:
            raise AirflowException(f"API requests to Azure failed {self.retry_limit} times. Giving up.")
        except aiohttp.ClientResponseError as err: