FileID: implement `FileID` struct

`FileID` should encapsulate `st_dev` and `st_ino`. It is a new abstraction
used to check if two files are the same. `FileID`s will be embeded inside
other struts like `buf_t` or `ff_visited_T`, where a full `FileInfo` would be
to big.
FileID: remove `INVALID_DEVICE_ID` macro
FileID: refactor buffer.c to use `FileID`
FileID: refactor ex_cmds2.c to use `FileID`
FileID: refactor file_search.c to use `FileID`
FileID: refactor if_cscope.c to use `FileID`
FileID: refactor path.c to use `FileID`
FileID: refactor os_unix.c to use `FileID`
FileID: make `os_stat()` static
FileID: remove last use of `st_ino` in memline.c

* FileID can’t be used in memline.c, because the block0 is defined to
use only a 32bit ino.
* implemented `os_file_info_get_inode`
* deprecated `os_file_info_get_inode
FileID: remove `CHECK_INODE` macro
Merge #775 'Implement `FileID` struct'
os: implement VimL libcall with {mch,os}_libcall

The old mch_libcall was removed from neovim. This is a partial
reimplementation on top of libuv. It doesn't catch exceptions (windows) nor
signals (unix) though, so it's quite a bit more prone to crashing if the
loadable library throws an exception or crashes. Still, it should be fine
for well-behaved libraries. Requested by @Shougo.
os: remove legacy mch_libcall

Remove as much leftover cruft as possible. Tried to see which globals are
now not used anymore.
libcall: remove libcall ifdefs

Remove all the legacy code that related to mch_libcall in some way.
os_libcall is implemented on top of libuv now.
Merge #802 'implement VimL libcall with os_libcall'
keep statusline within window width. @oni-link fix #858

PR #866
ref #858
ga_growsize should be >= 1

I know it could be 0 sometimes. Running the tests with
`assert(gap->ga_growsize > 0)` in ga_grow() crashes nvim while running the
tests.

 - Add a setter for ga_growsize that checks whether the value passed is >=1 (log
	 in case it's not)
 - log when ga_grow() tries to use a ga_growsize that's not >=1
 - use GA_EMPTY_INIT_VALUE is many places
Introduce GA_APPEND()

This macro is used to append an element to a growable array. It replaces this
common idiom:

   ga_grow(&ga, 1);
   ((item_type *)ga.ga_data)[ga.ga_len] = item;
   ++ga.ga_len;
Introduce ga_append_via_ptr() and GA_APPEND_VIA_PTR()

Similar to GA_APPEND(). Replaces this pattern:

    ga_grow(&ga, 1);
    item_type *p = ((item_type *)ga.ga_data) + ga.ga_len;
    p->field1 = v1;
    p->field2 = v2;
    ga.ga_len++;