feat(ngPluralize): add support for bind-once in `count`

The 1st commit contains the change and test for adding support for `bindOnce` in `count`.
The 2nd commit contains some nimor refactoring (mainly to avoid repetitive actions).

Closes #10004
(Makes #5452 obsolete)
@lgalfaso: Hm...I could really use a hint here. How could be use an interceptor and how would an interceptor make `lastCount` unnecessary ?

The only thing that I could think of and would make `lastCount` unnecessary is moving part of the logic in the "watch" function instead of in the "action" function:

      var numberExpGetter = $parse(numberExp);
      scope.$watch(function ngPluralizeCountWatch() {
        var count = parseFloat(numberExpGetter(scope));
        if (!isNaN(count) && !(count in whens)) {
          count = $locale.pluralCat(count - offset);
        }
        return count;
      }, function ngPluralizeCountWatchAction(newVal) {
          watchRemover();
          watchRemover = scope.$watch(whensExpFns[newVal], updateElementText);
      });

But considering how "watch" functions should be as lightweight as possible, it seems clearly wrong to me to put an extra `parseFloat + isNaN + (... in ...) + $locale.pluralCat` in every $digest loop.

There is probably a way to let `$parse` know that `ngPluralCountWatch` depends on `numberExpGetter(scope)` (so it doesn't have to execute the rest of the logic if the "input" hasn't change), but like I said I could use a hint on how to achieve this through `$watch`.