startuptime: move code to profile.{c,h} + doc

It's a better place to put it. Also slightly documented and reformatted, but
not changed.
startuptime: implement on top of profiling fns

Reuse the profiling functions to implement the startuptime functions.
Decreases our dependency on `gettimeofday()` and thus gets us a little bit
closer to a clean port to Windows.
garray: add necessary includes

The upcoming decoupling of vim.h and globals.h needs this to compile.
globals.h: decouple vim.h and globals.h

Allow globals.h to be included without including vim.h. Another small piece
of the puzzle of dismantling vim.h.

Moving some extra `#define`'s to globals.h is no better than having them in
vim.h. We should, in a later PR, move them to the file where they belong or
to a separate `constants.h` or something.
startuptime: always enable startuptime

Removes the STARTUPTIME define.
startuptime: print vim -> nvim
Merge #962 'Implement startuptime functions on top of profiling functions'
os/time: include time.h in os/time.h

Include what you use, also in the positive direction.
os/time: make os_get_localtime more portable

gettimeofday() doesn't exist on Windows, as reported by @equalsraf. It seems
a call to time() would be sufficient here, as only the seconds since the
UNIX epoch are needed.
os/time: fix os_localtime_r on win + add func_attr

- it makes no sense for these functions to take NULL pointers
- if `localtime()` on Windows returns a NULL pointer, the old code would try
  to dereference it.
Merge #965 'Make os_get_localtime() portable + fix bug on win'
Statically allocate NameBuff
Change buffer.h #defines to enums so they can be used in tests
Add tests for buffer.c and fileio.c
Merge pull request #904 from war1025/dev/buffer_tests

Add unit tests for buffer.c and fileio.c