First pass at integrating error messages.

Look at that! The tests pass! And there's no changes to client code
beyond wrapping up the string to parse! Swanky.