Offer single entry point to add / set elements

To simplify implementation of specific behavior (i.e: validating data) when extending ArrayCollection, a single entry point for all "set" operations would be welcome.
The main downside of this PR is the operation made in constructor: we need to manually loop through elements in order to add them one by one. This have a significant performance impact on very large collections.
Also it changes the current behaviour and might break existing applications (even though the API is not intended to be used like this).