Make ArrayCollection use its own API internally

I have changed ArrayCollection class in order to make it use its own API. Now it's much easier to build custom collections based on this class. For example, if you need a collection which change items "lazily" (finalize loading or normalize, etc) you only need to replace two methods: get() and toArray(). It also remove some of duplicated code.

I also have created unit test for this class to ensure that it still working. You can find Unit test in separate PR - #24. 

Thanks in advance!