util, utf8: make ellipsize take multi-byte characters into account

rename old versions to ascii_*

Do not take into account zerowidth characters, but do consider double-wide characters.
Import needed utf8 helper code from glib.

v3: rebase ontop of utf8 restructuring work

[zj: tweak the algorithm a bit, move new code to separate file]
test: test for ellipsize
unicode: treat cute symbol block as fullwidth

UNICODE standards only talk about fullwidth characters for East
Asian scripts. But it seems that all those symbols are fullwidth
too.
Never call qsort on potentially NULL arrays

This extends 62678ded 'efi: never call qsort on potentially
NULL arrays' to all other places where qsort is used and it
is not obvious that the count is non-zero.
Modernization

Fixes minor leak in error path in device.c.
dbus-common: avoid leak in error path

src/shared/dbus-common.c:968:33: warning: Potential leak of memory pointed to by 'l'
                        return -EINVAL;
                                ^~~~~~
journald: use greedy_realloc in one place
drop-ins: check return value

If the function failed, nothing serious would happen
because unlink would probably return EFAULT, but this
would obscure the real error and is a bit sloppy.
bus: fix access to unitialized variable in error path

src/machine/machined-dbus.c:237:13: warning: Branch condition evaluates to a garbage value
        if (m)
            ^
Introduce _cleanup_fdset_free_
Fix write-only use of a few variables

Since the invention of read-only memory, write-only memory has been
considered deprecated. Where appropriate, either make use of the
value, or avoid writing it, to make it clear that it is not used.
udev: use initialization instead of zeroing in one place
Make sure that we don't dereference NULL

The code was actually safe, because b should
never be null, because if rvalue is empty, a different
branch is taken. But we *do* check for NULL in the
loop above, so it's better to also check here for symmetry.
gitignore: ignore clang --analyze output
Introduce udev object cleanup functions
bus: make sure we don't try to malloc 0 bytes
event: avoid derefencing null pointer
man: add more markup to udevadm(8)