vim-patch:7.4.241

Problem:    The string returned by submatch() does not distinguish between a
            NL from a line break and a NL that stands for a NUL character.
Solution:   Add a second argument to return a list. (ZyX)

https://code.google.com/p/vim/source/detail?r=a63d0cd691dc925283815d17d62f4e948d723a59
path: add 'garray.h' to headers

The function prototypes use garray_T* arguments, but the header is not
included in path.h. Technically we could also get away with a forward
declaration since we're just using the pointer, but I don't see the urgent
need for that.
test: fix the cimport method

This commit will hopefully allow the cimport method to be used just as one
would use #inclue <header.h> in C. It follows the following method:

1. create a pseudoheader file that #include's all the requested header files
2. runs the pseudoheader through the C preprocessor (it will try various
   compilers if available on the system).
3. runs the preprocessed file through a C formatter, which attempts to group
   statements on one line. For example, a struct definition that was
   formerly on several lines will take just one line after formatting. This
   is done so that unique declarations can be detected. Duplicates are thus
   easy to remove.
4. remove lines that are too complex for the LuaJIT C parser (such as:
   Objective-C block syntax, crazy enums defined on linux, ...)
5. remove duplicate declarations
6. pass result to ffi.cdef
test: no longer define ad-hoc C headers

With the improved cimport helper, we can just load what we want.
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
garray: refactor and optimize ga_concat

I've checked all uses of ga_concat in the codebase:

- ex_cmds2.c
- ex_getln.c
- eval.c
- message.c
- regexp-nfa.c
- term.c
- spell.c

None of them concats the garray with itself. This makes it safe to use the
faster memcpy() instead of memmove(). This change was also documented.
garray: comment and refactor a bit more

The following functions are affected:

- ga_remove_duplicate_strings
- ga_append