ENH: added finalize to binary operators on DataFrame, GH28283
- [ ] xref #28283 
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added an entry in the latest `doc/source/whatsnew/v1.5.0.rst` file if fixing a bug or adding a new feature.

Adds metadata propagation to binary operators on `pd.DataFrame`
Behavior is consistent with binary operators between two `pd.Series` i.e. if two DataFrames both have `.attrs`, result will have `.attrs` of left-hand operand.
Example:
```
import pandas as pd
left = pd.DataFrame({"A": [1]})
right = pd.DataFrame({"A": [2]})
left.attrs = {"a": 1}
right.attrs = {"b": 1}
result = left + right
assert result.attrs == left.attrs
``` 

If operands are a `pd.DataFrame` and a `pd.Series` then `result.attrs == pd.DataFrame.attrs` regardless of ordering.

Thanks @seljaks 