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().

Other misc. changes:
- Added function attributes where relevant (const, pure, ...)
- 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.
- Extract profiling funcs to profile.c: make everything clearer and reduces
  the size of the "catch-all" ex_cmds2.c
- Add profile.{c,h} to clint and -Wconv:
  - Don't use sprintf, use snprintf
  - Don't use long, use int16_t/int32_t/...
profiling: move static to function scope

It wasn't used anywhere else, our coding guidelines mandate the tightest
scope possible.
profiling: add tests

Some functions are missing:

- profile_self
- profile_get_wait
- profile_set_wait
- profile_sub_wait
Merge pull request #839 from aktau/platform-abstract-time-fn

viml: impl profiling on top of uv_hrtime()
doc: add clang analysis badge to README.md
hashtab.h: don't include vim.h

Including vim.h in another header filer is asking for trouble. Test code
that includes separate header files (e.g.: cimport './src/nvim/buffer.h'),
has a really bad time with this. This is just one piece of the puzzle
though.
vim: move long_u from vim.h to types.h

Seems to make no difference to the main binary, but it helps the tests a bit
further along.
vim: move linenr_T and colnr_T to pos.h

Try to cut down vim.h's size. It's keeping us from testing more things.
vim: move disptick_T from vim.h to syntax_defs.h

Make vim.h smaller, bit by bit.
test/preprocess: always declare EXTERN

Unit tests never need to declare globals, only access them. In the main code
base this is handled by including "vim.h". If a file wants to declare
globals (in the case of neovim that's only main.c), it #define's EXTERN and
includes "vim.h". Otherwise, a file just includes "vim.h" (that's the
majority case). Since we want to be able to run unit tests without including
"vim.h", we predefine "EXTERN" to mean extern. That way, we don't have to
include "vim.h".
vim: move vim_acl_T to types.h

Also include "types.h" in os_unix.h because it declares functions that
return vim_acl_T.
memory.h: don't include vim.h in header files

Also include stdint.h in khash.h. It was transitively included by vim.h via
memory.h before. khash.h accidentally relied on that.
test/helpers: add 'vim_init' helper

- Initializes some global variables.
- Necessary for the buffer tests in PR #904.
test/fs: move tests of path_full_dir_name to path

Move tests of path_full_dir_name to path_spec. It is only defined in path.h.
Not sure why this works most of the time (I can only trigger a failure when
running under lldb).

It's a more logical place to have the test as well.
vim: include used definitions in headers

This is not an exhaustive commit, it merely ameliorates the situations a
bit. There are quite a few header files that don't include all the types
they use in their function/struct/... definitions. This throws of the
testing infrastructure (but is not such a problem for the main binary that
has the "tumbleweed of includes"-phenomenon).
Merge pull request #941 from aktau/improve-luajit-ffi-preproc

refactor includes + improve testing infrastructure
travis.sh: move symbolizer definition into common area
Merge #956 'travis.sh: move symbolizer definition into common area'