Returns a new string with end removed from the end, if it exists.
end
@useResult String removeEnd(String end) => endsWith(end) ? substringSafe(0, length - end.length) : this;