[RFC] Implement `xstrdup` and replace `strdup` calls

This is the `strdup` function but uses `xmalloc` to allocate memory, so it will succeed or exit the program.

I used 'strings.h' and not 'string.h' to make it more clear that it's not the header from standard library