assert: add STATIC_ASSERT macro

Can be quite handy, attempt to provide fallbacks for compilers that don't
support _Static_assert (which is technically a C11 feature). Suppress
warnings as best we can (Clang and GCC warn that we're using a C11 feature
while in C99 mode).

Needs to be tested for MSVC still.
os: implement os_hrtime

Just an alias to uv_hrtime. Provides a high-resolution timer.
profiling: implement on top of os_hrtime()

Should be better than gettimeofday() since libuv uses higher resolution
clocks on most UNIX platforms. Libuv also tries to use monotonic clocks,
kernel bugs notwithstanding, which is another win over gettimeofday().

Necessary for Windows, which doesn't have gettimeofday(). In vanilla vim,
Windows uses QueryPerformanceCounter, which is the correct primitive for
this sort of things, but that was removed when slimming up the codebase.
Libuv uses QueryPerformanceCounter to implement uv_hrtime() on Windows so
the behaviour of vim profiling on Windows should now be the same.

The behaviour on Linux should be different (better) though, libuv uses more
accurate primitives than gettimeofday().
profiling: add function attributes

This should provide the Clang static analyzer with enough information to
stop reporting some false positives. The vim interpreter never passes NULL
values to arguments (to `f_`-functions).
profiling: guard against setlimit overflow
profiling: convert functions to receive scalars

Now that proftime_T is always a (uint64_t) scalar (and not a struct), it's
clearer to convert the functions to receive it as such instead of a pointer
to a scalar.