add abstract parser

the parser API includes the parse function which takes a CSV Row and a
set of value changing methods that will change values to something
compatable with the course class.