Don’t allocate memory in casing functions
Change combine to compose in u_normalize
Use UTF-8 directly for u_normalize

It’s a bit special, as the result may become smaller if we’re actually
generating a result, so one may want to realloc after return.
Change u_foldcase allocation pattern
Add u_mirror
Use generic converting functions
Remove unused functions
Use same allocation pattern as other functions for u_reverse
Add u_recode
Update collation_key generation to use strxfrm
Add u_normalized/rb_u_normalized to check for normalization
Free locale if used
Rename normalization forms
Update u_collate to use u_collation_key
Remove unused parameter
REALLOC_N in convert_locale
Use LC_COLLATE environment variable in rb_u_string_collate
Add @raise to U::String#collate/#collation_key
Use output in rb_u_string_tr
Remove OFFSET_IF