printer_opts was left unitilized after #378
Revamp the build system.

This achieves several goals:

 * Less reliance on scripts so we have better portability to Windows
   (though we still have a ways to go for proper Windows support).
   Luajit, luarocks, moonscript, and busted are all installed via CMake
   now.
 * Trying to make use of pkg-config to get the correct libraries.  The
   latest libuv is still broken in this regard, but we'll at least be in
   a position to use it.
 * Allow the use of Ninja or make.  The former runs faster in many
   environments, and automatically makes use of parallel builds.

This also allows for system installed dependencies--though not through
the Makefile just yet--and adds support for FreeBSD.

This also make us build libuv and luajit as static libraries only, since
we're only concerned about having static libraries for our bundled
dependencies.
Deal with the missing dependencies for libuv.

Since libuv.pc is broken at the moment, try to determine libuv's
dependencies ourselves.  This ports most of the checks from libuv into
our CMake build, and fixes the build on other unix platforms.
Workaround the broken progress feedback in some versions of CMake.

Underneath the hood, CMake uses libcurl and libcurl has had a number of
issues regarding progress feedback.  In one sample run against Travis
CI, we ended up with nearly 3,000 lines of progress output for a single
download.

Unfortunately, CMake doesn't have the download and extract steps
separate, so we have some extra work that we have to do.  Much of the
content was taken from the ExternalProject.cmake and it's template for
generating the content of the download and extract CMake files.
Update to the newest libuv version
Don't require busted.

Only provide the unittest target if busted was found.  And only build
nvim-test if the unittest target exists by excluding nvim-test from all.
Note: this means nvim-test won't be built by default, but it will be
built when you try to run unittests.
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.