Revamp 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 issue 13128.
> I wasn't sure if that was the responsibility of the container?

It is.

> They are already memset to 0 and will be overwritten on insertion anyway.

Only if they have indirections. And even then, 0 is not a universally valid initialization value. `T.init` is.