Issue/12227 formatDate() improvements

* Add support for giving L10N
* Add support for $options from `$l->l()` to `formatDate()`
* Add support for relative dates (can be done with above step, as Punic\Calendar just requires adding a ^ to the format string)

Fixes #12227 

@DeepDiver1975 @PVince81 @MorrisJobke 
For me functions with that many arguments always smell and indicate that it may be better to split it into multiple functions instead.

`formatDate` actually implies that it formats a `Date`. And  `Date` has a very specific meaning in this regards. So why not creating a new function `formatDateTime` instead?

Also the timezone implies that it might be better to create a new class `OCP\Date` (or whatever) and there we could set it via a setter. Passing the timezone as argument seems just really like a hack. Same thing is obviously valid for the $options parameter.

Sure, this might not be in the scope of this PR but maybe it's better to create a new class for your use-case instead of adding even more bloat to util.php?

Just my two cents - feel free to ignore if it is out-of-scope :-)