Major parsing refactor

Want to keep simplifying this, but this is a good start. Parsers are
more similar in the methods they expose now, so we care even less which
one we're dealing with from the outside.