garray: add unit tests

Only append_ga_line() was not tested because it relies on global vim state.
garray: refactor ga_grow

- xrealloc will call xmalloc if the input pointer is NULL, no need to check
  twice.
- use the early-quit idiom to decrease the indentation, which enhances
  readability.
memory: implement xstp(n)cpy

Both are implemented to POSIX 2008 spec, though I'm not sure I'm happy about
stpncpy's behaviour.
garray: reimplement ga_concat_strings with stpcpy

Less useless strlen(), stpcpy() is a more natural fit for this task.
ga_concat_strings() still has too much strlen() but that would be ugly to
remove for a function that's not used very often (just once in the current
codebase).
garray: implement ga_concat_strings_sep

A generalized version of ga_concat_strings that can handle any separator.
Reimplement ga_concat_strings on top of it.
garray: add unit tests for ga_concat_strings_sep
garray: make parameter of ga_concat_strings const