Switch to exceptions for parsing errors

The error monads were cute and all but the syntax is horrific, and we're
really in exception land anyway.