Support for enumerable structures other than Array

By using the "call" version of Array.prototype.splice, using array-like
objects (objects with a length property) becomes possible.

When using ngRepeat with data from an AJAX-based backend it is possible
to delete two or more items in rapid succession and have to wait for an
AJAX web service to respond with a success or failure signal to
visually commit the deletion. In that situation, you may end up
cancelling one of the deletes and then the ngRepeat index does not
correspond with the backend structure, effectively removing the wrong
ngRepeat item because the index changed faster than the AJAX response
arrival. In such cases, using an array-like object works better.