Turn ARABIC_CHAR into a function
Move arabic.h #defines from arabic.h to arabic.c

 - Move arabic_shape() decl from main.h to arabic.h
 - Move arabic_combine() and arabic_maycombine() from mbyte.c to
   arabic.c as these functions use the #defines I moved.
 - Remove the unnecessary include of arabic.h in globals.h
 - Remove include of arabic.c (sic) in main.c (change CMakeLists.txt to compile
   arabic.c normally)
Reformat new function in arabic.c to comply with style guide
inline arabic_char()
Implement `mch_delay` on top of libuv

Needed to temporarily move two static variables from os_unix.c to 'globals.h'
as those are shared by other functions still in os_unix.
fix mch_delay() unittest
Fail RunUnittests if we get a non-zero exit code from busted.
Move some #defines from farsi.h to farsi.c
Do not include farsi.c in main.c

 - Change CMakeLists.txt to compile farsi.c normally
 - Add const to global variables in farsi.h and define them in farsi.c (no need
   to include farsi.h with DO_INIT defined in globals.h)
 - Include farsi.h where necessary
 - Include all necessary headers in farsi.c
 - Move farsi function declarations from main.h to farsi.h
Use memset instead of vim_memset

Ran some commands on terminal, reviewed changes, and made some manual changes
too.

    find src | xargs perl -i -p -e "s/vim_memset/memset/g"
    git grep -l memset | egrep "\.c$" | xargs perl -i -p -e \
        's/(#include "vim\.h")/#include <string.h>\n\n\1/g'
Prefer enums over incremental defines
Use memmove instead of mch_memmove
Use memcmp instead of vim_memcmp
Remove MEM_PROFILE related code

Code around `#ifdef MEM_PROFILE` was used to profile vim's memory
comsumption. It's very likely broken as new code is using malloc() and free()
directly.

In this day and age, valgrind can solve in a much reliable way what
this code was trying to do.
HAVE_AVAIL_MEM is always undefined. Remove tests and dead code

Defining HAVE_AVAIL_MEM doesn't even build. The code tries to call
`mch_avail_mem` which is not defined.
Use realloc instead of vim_realloc
Reimplement input functions on top of libuv

The functions `mch_inchar`, `mch_breakcheck`, `mch_char_avail` were
reimplemented on top of libuv. Here's how it works:

- When Neovim needs to wait for characters, it will transfer control to libuv
  event loop.
- When the libuv event loop gets user input, it will transfer control back to
  Neovim
- Neovim uses the `input_read` function to get the actual data read by libuv.

With this scheme its possible to keep Neovim single-threaded while enjoying the
benefits provided by libuv.

This commit leaves SIGWINCH broken for now
Uncrustify indent.c
Fix comments
Fix whitespace