(WIP) ENH: Add PeriodBlock
- [x] closes #7964
- [ ] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [ ] whatsnew entry

This PR is **NOT** ready for review, but to show basic direction. Especially, supporting period arithmetic is quite unreliable because current `_TimeOp` class is basically for `np.ndarray` operations. I think refactoring `_TimeOp` is needed prior to this PR.

Would like to split the PR to 3 parts:
- 1. Add `PeriodDtype` definition, let `PeriodIndex` to have `PeriodDtype` like `period[M]`.  (#13941)
- 2. Refactor `_TimeOp` splitting to `_DatetimeOp` and `_TimedeltaOp`, merging `DatetimeIndex` and `TimedeltaIndex` arithmetics.
  - `_DatetimeOp` is for lhs or rhs is `datetime64` or `datetimetz` dtypes.
  - `_TimedeltaOp` is for other `timedelta` related types.
- 3. Add `PeriodBlock`, adding `_PeriodOp` for arithmetic (this PR).
