I should be able to supply $scope.$watch a comparator function to check for equality

Currently, $watch either checks for equality by object reference, or by Angular's equals function, which iterates through the objects properties.

We should be able to supply $watch with an comparator function to have a more lean equality detection.