[RFC] viml: impl profiling on top of uv_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.

Necessary for Windows, which doesn't have gettimeofday().

Relevant issue: #831

References for `STATIC_ASSERT`:
- http://www.pixelbeat.org/programming/gcc/static_assert.html
- http://comments.gmane.org/gmane.comp.lib.gnulib.bugs/25870
- https://github.com/gagern/gnulib/blob/master/lib/verify.h
- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61407

**UPDATE**: Since we now have a platform abstract `uint64_t` type (`proftime_T`) instead of `LARGE_INTEGER` and `struct timeval`, I'm thinking of passing by value and perhaps even eliminating some of the one-line functions.

Ping: @justinmk @ZyX-I @equalsraf
And this is non-static function so `FUNC_ATTR_NONNULL_ALL` should make clang static analysis more correct (AFAIR when I checked *Vim* with clang static analyzer I got lots of false positives regarding the fact that developers did not check for NULL in cases where NULL return is not possible, but do not remember any reports about passing NULL to some external functions). If you started to modify these functions, including adding documentation it would be good to also provide hints for the analyzer. All modified functions in this file need this. I am not sure whether it is correct to add this change to *this* pull request though.