Array length patches

This set of patches changes the Array handling fundamentally by using the `varData.integer` field to store the nominal array length, instead of a fake pseudo-entry for the last element.

I can't be 100% sure that it doesn't break anything, but it scores at least as well on the regression tests as the current master code.

It fixes issues #351 and #361
It doesn't fix issue #163, #348 or #349, although it'll probably make implementing a fix for #163 easier.