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.
But what the API did, unlike PHP arrays:

```
$collection[null] = 'item'; // array(0 => 'item')
$array[null] = 'item'; // array('' => 'item')
```

There is no implicit trans-typying as php does with arrays when calling offsetSet, but it does with $collection->set().