It makes likely more sense to implement that entirely in user code. The
parsing/printing functions for common formats have also been improved so
this is likely not very relevant anymore anyways.
* Avoid heap allocation and counting separators
* Avoid code repetition
* Throw an exception if too many parts are present (as the documentation
suggests this function would do)
* Allow emptry separators as this seems useful
DateTime and TimeSpan have an accuracy of 100 nanoseconds.
This commit ensures this is also handled in toString() and
fromString() methods and adds relevant convenience methods.