stricter check on ISO formatting, consolidate

baby steps to clean up code readability

also skips milliseconds in parseFromISO. we don't include them (why?) in
the parse result, but recognize that they might be there, so that they
don't mess up the offset extraction

(before, they'd mess up the offset extraction, but it was unvalidated)

Change-Id: I20d4b1628aa232d139153361c1d612c3b1dad7ed
Reviewed-on: https://gerrit.instructure.com/31593
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Braden Anderson <banderson@instructure.com>
Product-Review: Jacob Fugal <jacob@instructure.com>
QA-Review: Jacob Fugal <jacob@instructure.com>