Work around strict aliasing in array growth

When we try to grow the array, some versions of GCC apply the struct aliasing rules such that it does not reload the value of the size for the offset calculation, which would cause it to return wrong values.

Moving the growth function to a different compilation module and removing the inline annotation forces it to reload the value and return the correct result.

The first commit removes some code that wasn't doing anything useful but has been managing to hide the strict aliasing issue in the tests, as without those lines we would have been able to catch this problem in the tests for the particular gcc versions; that or more complex tests, but those are boring to write.