truncateMiddle
Shortens this string to at most maxLength characters by removing a middle section and inserting ellipsis in its place.
The start and end of the string are kept; when the kept character count is odd, the extra character comes from the start. Returns this string unchanged when it already fits. When maxLength is smaller than the length of ellipsis, the ellipsis itself is cut to fit. Returns an empty string when maxLength is zero or negative.