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.
Improve integer division by zero

According to :h expr-/ division by zero must have always the same results for
Numbers:

>     When dividing a Number by zero the result depends on the value:
>     	  0 / 0  = -0x80000000	(like NaN for Float)
>     	 >0 / 0  =  0x7fffffff	(like positive infinity)
>     	 <0 / 0  = -0x7fffffff	(like negative infinity)
>     	(before Vim 7.2 it was always 0x7fffffff)
Improve modulo by zero support

According to :h expr-%

> When the righthand side of '%' is zero, the result is 0.
Make modulo with negative numbers behave like in Vim

n1 | n2 | n1 % n2 (Vim) | n1 % n2 (lua) | Difference
-- | -- | ------------- | ------------- | ----------
 1 |  2 |       1       |       1       |   absent
-1 |  2 |      -1       |       1       |     -+
 1 | -2 |       1       |      -1       |     +-
-1 | -2 |      -1       |      -1       |   absent

I do not see this behavior mentioned in help though.
Disable modulo operator for floating-point values
Add support for hexadecimal numbers in string
Start creating operators tests
Add :unlet support and some code for :delfunction

No actual :delfunction support and no :unlet tests yet.
Use :unlet to fix tests

Problem: blocks.lua tests are executed after assignments.lua, but require g:a
variable to be undefined. Assignments tests define this variable though.
Add some :unlet tests