add an abstract catalog class

ideally all specific catalogs will inherit from this catalog and
hopefully only the handle method will have to be overridden with a
different parser