refactor(inputSpec): move digest into compileInput helper
refactor(ngModelOptions): move all logic into ngModelController

move responsibility for pending and debouncing model updates into ngModeController by letting input dierctives pass all view updates to $setViewValue, where they will remain pending until an updateOn trigger occurs and debounced. intoducing a new api ($commitViewValue) which allows to flush pending or debounced updates so that they will take place immidiately.

BREAKING CHANGE: NgModelController.$cancelUpdate was renamed to NgModelController.$rollbackViewValue

  To migrate the code follow the example below:

  Before:

  $scope.resetWithCancel = function (e) {
    if (e.keyCode == 27) {
      $scope.myForm.myInput1.$cancelUpdate();
      $scope.myValue = '';
    }
  };

  After:

  $scope.resetWithCancel = function (e) {
    if (e.keyCode == 27) {
      $scope.myForm.myInput1.$rollbackViewValue();
      $scope.myValue = '';
    }
  }
feat(ngFormController): commit view value on submit

use the new NgModelController.$commitViewValue method in order to make sure that all pending and debounced updates are flushed immediately in case the enclosing for is submitted.

Closes #7017