Fixing a critical bug in the array reallocation logic.
I was memcpy'ing too many bytes from the existing array.
This only showed up once I wrote some stress unit tests...wonder why.

Ported the C ArrayList improvements done earlier to the C++ code.

Created tests for the C++ code as well.
Since the C++ code hides ALOT of the ArrayList internals (by design), I cannot create tests that are as beefy (fragile?) as the C ones that check on internal state.

Going forward, I will probably main my development in the C codeset and port my changes to C++.
This will allow me to really vet out the internals of a structure before supporting C++'s features.