Datetimelike __setitem__
Split from #24024.

This is mostly just a move from PeriodArray to DatetimelikeArray, with period-specific things replaced with `_check_compatible_with`, `_unbox_scalar`, etc.

This is under-tested at the moment, just the basics are actually hit. But I think this is OK for two reasons

1. I'll immediately rebase #24024 with these changes, so we'll get the setitem tests shortly after merging (and can revert / whatever as needed)
2. We do run the full suite of tests for PeriodArray, and any type-specific stuff *should* be hit currently with the tests here (`_check_compatible_with`, freq invalidation, etc.).