Add a DateTimeFormatter class which allows overwriting the language and ...

Fix #12227

ToDo:
- [ ] Write tests
- [ ] Bring back "Last year/month"
- [ ] OCP
- [ ] Add to service container with current user's locale and timezone as default
- [ ] Deprecate `Util::formatDate()` and `relative_modified_date()`

@DeepDiver1975 if you have a moment to look at the first implementation scratch
Is there also reason for that type juggling here? - Why not just enforce OC_L10N and DateTimeZone instead of also doing some magic converting. With OC_L10N you know what to pass, with a string, you don't.