feat(Scope): add $watchCollection method for observing collections

The new method allows to shallow watch collections (Arrays/Maps).
feat(ngRepeat): add support for custom tracking of items

BREAKING CHANGE:

It is considered an error to have two items produce
the same track by key. (This was tolerated before.)