Use ArrayObject for AbstractElementCollection

It appears, that a set of interfaces the `AbstractElementCollection` class is implementing for manipulations with collection elements matches ones that `ArrayObject` class has. Let's extend that class instead of writing all processing manually.