BUG: Fix freq setter for DatetimeIndex/TimedeltaIndex and deprecate for PeriodIndex
- [X] closes #20678
- [X] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [X] whatsnew entry

For `DatetimeIndex`/`TimedeltaIndex`:
  - Setting `freq` with a string alias now works
  - Frequencies are validated with invalid frequencies raising
     - Same behavior as when the constructor is called with an invalid frequency

For `PeriodIndex`:
  - Setting `freq` is deprecated in favor of `asfreq`
      - The behavior of the setter would be ambiguous without the extra `asfreq` params
  - Left the existing (buggy) `freq` setter behavior as-is
     - Didn't seem worthwhile to try fixing it
  - I don't think that the setter was widely used for `PeriodIndex` anyways
     - Didn't see any warnings in the tests