add more Period conversions

This patch adds `convert` methods so that you can now do e.g. `Second(Day(1))` and get 86400s, for all of the `FixedPeriod` types which correspond to fixed time intervals.  It also supports conversions of `Month` to `Year` since a calendar year always has 12 months, but conversions of `Month` to `Week` etcetera is not implemented because the length of a `Month` varies.  Fixes #9171.

Previously, `Period` conversion was only supported to `Millisecond` and `Day`.  Previously, conversion to `Day` would silently truncate the results (e.g. for `Day(Hour(23))`), but now this throws an `InexactError`; see #9169.

Also, this expands upon #9217 by further canonicalizing `CompoundPeriod` types to ensure that `0 < ms < 1000`, `0 < s < 60`, etcetera.  For example, `Dates.Day(8) - Dates.Second(1)` gives `1 week, 23 hours, 59 minutes, 59 seconds`.   This allows reliable `==` comparison of `CompoundPeriod` types.

cc: @quinnj