Rather than adding 50 lines of error checking / propagation, what do you think about leaving all the private methods panicking and have a defer at the top level Parse() that converts the panic into an error? 

(I believe panics are "allowed" within api boundaries, as the stdlib uses them for such purposes)