Initial review

The most recent commit message is so accurate.

There's something kinda strange about this file raising `ParseError` instances when it's not doing the parsing, seems like a minor layering violation of some sort.  Suggest raising a plain ValueError then catching it in the parser code.