BUG: Preserve column names in DataFrame.from_records when nrows=0
### Description
Updates pandas/core/frame.py to preserve column names in empty DataFrames when nrows == 0. Changed from return Cls() to return Cls(columns=columns).

Closes #61140

### Changes Made
- Modified if nrows == 0 in core/frame.py.
- Added test in tests/frame/test_constructors.py.

### Testing
- Added test case for empty DataFrame column retention.
- Verified locally with pytest.

I have updated the PR with the latest changes based on feedback. Please review again. Looks good! The change in `pandas/core/frame.py` appears to correctly address the issue of preserving column names when using `DataFrame.from_records` with `nrows=0` and an empty iterator. The added test `test_from_records_empty_iterator_with_preserve_columns` in `pandas/tests/frame/test_constructors.py` also looks good and verifies the fix effectively.

One minor point: It looks like the test was also added as a new standalone file `pandas/core/frame_test_constructors.py`. This seems unintentional, duplicates the test already added in the correct test module, and places test code within the `pandas/core` directory. Or is it intentional? I have updated the changes. Please check and let me know if any improvements are needed. Thank you  @kpvenkat47 - as mentioned we should add a line to the whatsnew for v3.0 in `doc/source/whatsnew/` under the `I/O` section. Also the pre-commit and code checks are failing on this PR - those will need to be passing for this to be able to be merged. Let me know if you need any assistance here. This pull request is stale because it has been open for thirty days with no activity. Please [update](https://pandas.pydata.org/pandas-docs/stable/development/contributing.html#updating-your-pull-request) and respond to this comment if you're still interested in working on this. Thanks for the pull request, but it appears to have gone stale. If interested in continuing, please merge in the main branch, address any review comments and/or failing tests, and we can reopen.