fix(ngRepeat): handle iteration over identical obj values

Modifies default trackByIdFn to factor both key and value into hashKey
for non-array primitive (i.e. index not provided) values

Closes #2787
Closes #2806
fix(form): pick the right attribute name for ngForm

Closes #2997
feat(ngRepeat): add $even and $odd props to iterator
fix(ngMobile): prevent ngClick when item disabled

 - the ngClick attribute was always triggered, regardless the ngDisabled/disabled attributes
 - we now check the DOM disabled status before triggering the original click event

Closes #3124
Closes #3132
fix(select): don't support binding to select[multiple]

changing the type of select box from single to multiple or the other way around
at runtime is currently not supported and the two-way binding does odd stuff
when such situation happens.

we might eventually support this, but for now we are just going to not allow
binding to select[multiple] to prevent people from relying on something that
doesn't work.

BREAKING CHANGE: binding to select[multiple] directly or via ngMultiple (ng-multiple)
directive is not supported. This feature never worked with two-way data-binding,
so it's not expected that anybody actually depends on it.

Closes #3230
fix(ngMobile): emit click event for touchy clicks

Previously, no handlers for the click event would be called for the
fast, touch-based ngMobile clicks, only for desktop browser clicks. Now
the event will fire properly for all clicks.

Closes #3219
Closes #3218
Closes #3137
fix(grunt): change css wrapping to prepend styles to the top of the head tag

angular.css is used by the utils.js CSS wrap operation, but ng-hide or
any other CSS styles present in angular.css cannot be overridden unless
the styles appear before the stylesheet is in place. This fix allows
for this to work
feat(ngAnimate): provide support for animator animation callbacks

prior to this feature, there was no way to detect when an animation has completed
when using $animator inside directives. An optional "done" callback function can
can be now provided to for animation instance method which is fired once the animation has
completed or when a new animation takes place on the same element.

BREAKING CHANGE: in $animator, all public-facing instance methods have
been changed to accept a final callback function argument:

Use the following animation instance methods when performing animations
inside of directives:
animator.enter(element, parent, after, done);
animator.leave(element, done);
animator.move(element, parent, after, done);
animator.show(element, done);
animator.hide(element, done);

feat($animator): provide support for animator to perform both CSS and JS animations at the same time

feat(ngAnimate): provide support for addClass and removeClass animation handlers

feat(ngShowHide): change ngShow and ngHide to use a class name value instead of direct css code

feat(animator): move ngAnimate out of the core and provide support for non-ngAnimate animation detection

feat(ngClass): provide support for animation
chore(ngAnimate): remove $animate.show() / .hide() in favor of .addClass / .removeClass
chore(ngInclude): $animate refactoring + transclusion & tests
chore(ngView): $animate refactoring + transclusion & tests
fix(ngAnimate): $timeout integration and cancel callbacks added