fix(input): determine input[type=number] validity with ValidityState

On Chromium / Safari / Opera, currently:

When a non-numeric string is entered into an input[type=number], the browser
reports the value and innerText as the empty string.

Without the ngRequire directive, the empty string is considered a valid value.

This leads to false-positives.

The aim of this patch is to suppress these false positives on browsers which
implement the `ValidityState` object. Input directives may subscribe to check
for `ValidityState` changes, and use the ValidityState during their processing.

This allows the differentiation between "valid" and "invalid" empty strings.

Closes #2144