Refactor Array

Main changes:
RemoveAt, InsertAt - Private API.
Capacity - It can now shrink and enlarge - however there is no public API to enlarge.

Most internals re-factored to use RemoveAt, InsertAt - avoids a lot
of duplication and ensures proper clean-up when objects were being removed.

Fix array bounds

Improve documentation.

Fixes

Remove some redundant checks.
Change memset -> initializeAll.
Ensure capacity can only grow in reserve.

Shrink

Swap length/capacity