fix(ngModel): test & update correct model when running $validate

If `$validate` is invoked when the model is already invalid, `$validate` should pass `$$invalidModelValue` to the validators, not `$modelValue`. More over, if the model has become valid, the previously invalid model should be assigned to `$modelValue`. Lastly, in case the model has become invalid, the previously valid model should be assigned to `$$invalidModelValue`.

Closes #7836
I talked with @matsko about this in https://github.com/angular/angular.js/commit/a8c7cb81c9e67b52d5c649bf3d8cec06c5976852#commitcomment-6681109 and the consensus is that there should be initial validation. So maybe this can dropped later.