Refactor: Async-ify input validation functions.

Give the range/length/default/required/repeat input validation functions an
async interface. This is necessary for scriptable properties: we need to invoke
the validation/normalization for the script output, since code may not return a
normalized or even valid value.

This also cleans up `async_error_if_invalid` (now called `async_error_check`),
and updates `async.waterfall` invocations to explicitly distinguish errors from
ordinary arguments in the final/completion handler.