Data.Aeson.Types.Instances: fix UTCTime for years outside of [0, 9999]

∙ "take 23" is a dubious way to truncate to millisecond accuracy.
∙ instance ToJSON ZonedTime had it right, so copypasta from it.

```
*Data.Aeson> import Data.Time
*Data.Aeson Data.Time> encode $ UTCTime (fromGregorian 100000 1 1) 0
"\"100000-01-01T00:00:00.0Z\""
```