Use cache_readonly attrs to minimize attrs set in __init__
Trying to break the fixes to `offsets` into small pieces.  Recall the goal is to make `DateOffset` immutable so as to fix the very slow `__eq__` calls that get made by `Period.__eq__` and the `PeriodIndex` constructor.

As a step towards immutability, this PR is trying to reduce the number of attributes set in `__init__`, as suggested by @shoyer a while back.

In two places the `__init__` methods are identical to those of the parent class, so are removed.
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=h1) Report
> Merging [#17450](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/d4577911c750f2f48f760ce451d413116bed72da?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `84.21%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/17450/graphs/tree.svg?width=650&height=150&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #17450      +/-   ##
==========================================
- Coverage   91.15%   91.13%   -0.03%     
==========================================
  Files         163      163              
  Lines       49587    49593       +6     
==========================================
- Hits        45203    45197       -6     
- Misses       4384     4396      +12
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.92% <84.21%> (-0.01%)` | :arrow_down: |
| #single | `40.25% <36.84%> (-0.06%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/tseries/offsets.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvb2Zmc2V0cy5weQ==) | `96.97% <84.21%> (-0.18%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `25% <0%> (-58.34%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `97.72% <0%> (-0.1%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=footer). Last update [d457791...d2d4e66](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 # [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=h1) Report
> Merging [#17450](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/d4577911c750f2f48f760ce451d413116bed72da?src=pr&el=desc) will **decrease** coverage by `0.02%`.
> The diff coverage is `85.71%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/17450/graphs/tree.svg?src=pr&token=eZ4WkYLtcO&height=150&width=650)](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #17450      +/-   ##
==========================================
- Coverage   91.15%   91.13%   -0.03%     
==========================================
  Files         163      163              
  Lines       49587    49597      +10     
==========================================
- Hits        45203    45201       -2     
- Misses       4384     4396      +12
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `88.92% <85.71%> (-0.01%)` | :arrow_down: |
| #single | `40.25% <33.33%> (-0.07%)` | :arrow_down: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/tseries/offsets.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL3RzZXJpZXMvb2Zmc2V0cy5weQ==) | `96.97% <85.71%> (-0.18%)` | :arrow_down: |
| [pandas/io/gbq.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL2lvL2dicS5weQ==) | `25% <0%> (-58.34%)` | :arrow_down: |
| [pandas/core/frame.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZnJhbWUucHk=) | `97.72% <0%> (-0.1%)` | :arrow_down: |
| [pandas/core/indexes/range.py](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9yYW5nZS5weQ==) | `92.28% <0%> (+0.09%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=footer). Last update [d457791...d2d4e66](https://codecov.io/gh/pandas-dev/pandas/pull/17450?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
 this is fine. thanks.