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
`self::findLanguage()` always returns the language of the current user, instead of the language that has been overwritten.
We are inside a $l object here, so the constructor sets it properly:
```php
	public function __construct($app, $lang = null) {
		$this->app = $app;
		$this->lang = $lang;
	}
```