Call __finalize__ in Dataframe.combine and Dataframe.combine_first
- [x] resolves tasks in #28283 
- [x] remove not-implemented flag in tests

Here is my thought: In these two cases, I just let the attr from the first dataframe to propagate to the result. I think this is the most straightforward way and requires the least overhead. Let me know if this doesn't seem right.  Thanks @jinlixiao 