Silence a few warnings, add a primitive stack trace, make assertArrayEquals() more accurate, fix Array#slice(), add some new tests.

The return type of the original fh_arg_len() was signed, but it was guaranteed that the function never returned a negative value. Some parts of the code assumed so and compared values returned by ARGLEN() with values of unsigned types. The change seems to make sense and it silences a few compiler complaints.

With compiler settings -Wall -Wextra and after silencing some of the less important compiler warnings, I was able to notice that slice() was not handling negative parameters correctly (they were converted to unsigned int). When I discovered that, I wondered why the tests weren't failing, investigated a little bit and made the checks test if length of two compared arrays is equal, and added a primitive stack trace so that I could see better what was happening. Then I could fix the problem with slice().

The array tests collection still fails, due to Array#sort() breaking the array's length and order of its index names (well, keys). This one is causing me a little more trouble than anything else so far.

Note: I left INT_MAX as the limit of ARGLEN(), because I don't know if it's a design choice. If it's not, consider changing it to UINT_MAX and reconsider the comment made in Array.c, line 44.