BUG: hash_pandas_object ignores optional arguments when the input is a DataFrame.
- [x] closes #41404
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [x] whatsnew entry

In this PR, I will try to solve issue #41404.
I would appreciate it if you could review this.

## About the issue

In the current `pandas.util.hash_pandas_object` function implementation, the hash_key argument is ignored when the input object type is a DataFrame.
This is a reproducible example.

```py
df = pd.DataFrame({"x": list("abc")})
new_hash_key = "a"*16
print("Series")
print(pd.util.hash_pandas_object(df["x"]).values)
print(pd.util.hash_pandas_object(df["x"], hash_key=new_hash_key).values)
print("DataFrame")
print(pd.util.hash_pandas_object(df).values)
print(pd.util.hash_pandas_object(df, hash_key=new_hash_key).values)
```

The output is here.

```
Series
[ 4578374827886788867 17338122309987883691  5473791562133574857]
[14372590553486244284 12017144478307119910    34790805896362026]
DataFrame
[ 4578374827886788867 17338122309987883691  5473791562133574857]
[ 4578374827886788867 17338122309987883691  5473791562133574857]
```

The last output should be
```
[14372590553486244284 12017144478307119910    34790805896362026]
```

## About the fix

When the input object is a DataFrame, the hash values are calculated by applying `hash_array` function for each Series.
However, optional arguments, including `hash_key`, are not passed to the hash_array function in the current implementation.
To fix this, I passed the optional arguments to the hash_array function.