perf(ngmodel/compile): improve ngmodel and general compile/controller performance (#9609)

This was mainly focused around #9609 - bringing 1.3 up to speed with 1.2 with an ng-repeated ng-model, at least when not using jQuery.

Overall these changes make the added benchmark (and the jsfiddle in #9609) 2-3x faster and seem to be faster then 1.2 now.

The last 3 commits (refactoring controller stuff in $compile) can probably be squashed but I left them separate for now for nicer diffs.

The only functional change (that I know of) is that the NgModelController `$name` is now initialized by the directive (pre-link) instead of within the controller. I'm not sure if this an issue or considered breaking? This was already the case for the `$options` field...
Hm...I counted 23 occurences (in core), of which 9 have a `hasOwnProperty()` check, and 2 I know are deliberate (probably more but I don't know about them). Plus, in some places we use `createMap()` in order to be able to use `for...in` safely.

So, I don't think there are that many places that would actually break if `Object.prototype` is modified and definitely not see any reason to add some more (especially if it is such an easy fix).

In any case, I don't feel comfortable with "not bothering doing the right thing, since it's broken elsewhere anyway" :smiling_imp:

(m2c)