When writing a wrapper around LibPSL in a different language it is
important that libpsl provide functions to free any memory that it
allocates. Without this, it is impossible to correctly free the memory
allocated by psl_str_to_utf8lower() function since in other languages
one may not have access to the same free() call from libc.
This uses the more common convention where the variable freed is the
thing returned from the constructor directly, rather than having the
deallocator also zero out the pointer itself.
There is no need to for an initialization function if the builtin
structs if the comparison function will look at label_buf directly
when label == NULL.
This simplifies the API for users, who now don't have to worry about
library initialization and deinitialization functions (these sort of
functions can cause headaches in chained library loads, esp. in plugin
architectures like PAM).