Parsing time

Time input is now much more forgiving: any of `'####'`, `'##'`, `'#'`, `'#:## AM'`, `'##a'`, etc., are converted to the five character string `'##:##'` (`#` represents a digit.)

The conversion is implemented as a pre-validation hook, which means that invalid times like `'99'` are still converted to `'99:00'` before failing the validation.