moved the implementation of some of the classes into .cpp files, fixed test linking and run path, added some actual tests for header and the error message