types: typedef long_u as uintptr_t #961

As discussed here: https://github.com/neovim/neovim/pull/941/files#r15026398
coverity/62610: Remove dead code from setfname()
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'