Make some attributes of DateOffset read-only; add tests
This PR takes over for #17137.  That PR tried to handle the general case of this issue, but ultimately doing that correctly would require a much more extreme refactoring.

This PR only used a cached version of `_params` when `kwds` is empty.  This special case covers `'M', 'D', 'H', 'min', 'sec', 'ms', 'us', 'ns'` special cases.

I plan to extend this to cover at least the Annual and Quarterly cases, but doing that carefully may take a while, so this can get the ball rolling.


 - [ ] closes #xxxx
 - [x] tests added / passed
 - [x] passes ``git diff upstream/master -u -- "*.py" | flake8 --diff``
 - [ ] whatsnew entry
