feat(NgModel): introduce the $validators pipeline
fix(NgModel): make sure the required validator uses the $validators pipeline

Fixes #5164
fix(NgModel): make sure the pattern validator uses the $validators pipeline
fix(NgModel): make sure the ngMinlength and ngMaxlength validators use the $validators pipeline

Fixes #6304
fix(NgModel): make ngMinlength and ngMaxlength as standalone directives

Fixes #6750
fix(NgModel): ensure pattern and ngPattern use the same validator

When the pattern and ng-pattern attributes are used with an input element
containing a ngModel directive then they should both use the same validator
and the validation errors of the model should be placed on model.$error.pattern.

BREAKING CHANGE:

If an expression is used on ng-pattern (such as `ng-pattern="exp"`) or on the
pattern attribute (something like on `pattern="{{ exp }}"`) and the expression
itself evaluates to a string then the validator will not parse the string as a
literal regular expression object (a value like `/abc/i`).  Instead, the entire
string will be created as the regular expression to test against. This means
that any expression flags will not be placed on the RegExp object. To get around
this limitation, use a regular expression object as the value for the expression.

    //before
    $scope.exp = '/abc/i';

    //after
    $scope.exp = /abc/i;
docs(forms): additional documentation for $touched vs $pristine states
fix($compile): ensure transclude works at root of templateUrl

If a "replace" directive has an async template, which contains a transclusion
directive at its root node, then outer transclusions were failing to be
passed to this directive.  An example would be uses of `ngIf` inside and
outside the template.

Collaborated with @caitp

Closes #7183
Closes #7772
fix($parse): Handle one-time to `null`

Handles when a one-time binding stabilizes to `null`

Closes #7743
Closes #7787