BUG/ENH: Handle NonexistentTimeError in date rounding
- [x] closes #23324
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Similar strategy as https://github.com/pandas-dev/pandas/pull/22647, added a `nonexistent` keyword argument to `round`, `ceil`, and `floor` to control rounding when encountering a `NonexistentTimeError`

This is also fixes a bug in the `nonexistent='shift'` implementation in https://github.com/pandas-dev/pandas/pull/22644 where dates with timezones with negative UTC offsets got shifted by an additional hour. This bug is naturally tested by these rounding tests