WIP: Make sure types used in Array.c are adequate

- Array length can be up to 2^32-1, so variables used to make
  calculations based on the array length need to be at least
  unsigned long.
- While the tests pass, I still need to make sure that negative numbers
  passed as argument behave appropriately. In some cases negative
  numbers are allowed, and in other cases they need to be converted
  with the abstract ToUint* functions.