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...
Since `elementControllers` is initialized as `{}`, this would break if the user added enumerable properties on `Object.prototype`. After a quick scan, it seems safe to replace `{}` with `createMap()` to avoid this potential issue (but a more careful investigation is required).