fixup! s/vim.negate_logical/vim.op.negate_logical
Do not use lua_*integer functions
Replace all viml moon tests with lua tests

Reason: busted/luajit/whatever enters infinite cycle when using .moon tests.

Reason for entering infinite cycle is not known. This commit fixes tests (at
least, on my machine), but not the bug.

Ref #903
Make it build with GCC and macros-generated declarations

GCC may emit declarations like the following:

    static size_t

    # 42 "this/file.c"
    function(args)

for code like this:

    static FDEF(function)

. Declaration generator script does not expect `# …` inside declarations. This
commit makes it treat such things as comments.
Fix format warning emitted by GCC

`%o` format is only used for unsigned integers. Also add test to make sure that
`-octal` is parsed as `(unary-)((octal))`: otherwise translator will have to add
special handling for leading unary minus.
Compile static luajit library with -fPIC

Should fix the following travis error:

    /usr/bin/ld: /opt/neovim-deps/lib/libluajit-5.1.a(lj_err.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
    /opt/neovim-deps/lib/libluajit-5.1.a: could not read symbols: Bad value
Add code for dumping objects

Untested
Use function that returns top-level state dictionary
Add support for modifying assignments

I.e. let +=, let -=, let .=.
Get rid of indent variables: use lua blocks instead
Add Object dumper for executor tests
Start creating executor tests
Add support for v:exception
Assume that type functions are always passed correct values
Get rid of non_nil decorator in most functions

It is slow.
Refactor and extend comparison support

In previous state it was too slow and did not work for lists and dictionaries.
Types layout refactoring
Add v:exception tests
Improve numeric operations support

Integer division is rather hacky: math.floor(15 / 7) will return 2 (same as
integer division), but math.floor(-15 / 7) will return -3, while integer
division returns -2.

Thus I use math.floor() on absolute value and then apply sign.
Add number.negate and number.promote_integer

Should be a bit faster then generic versions from scalar dictionary.