Big redesign of our parser. More scalable, and polymorphic, as according
to Nathan's suggestions