setting up some core classes
added some test infrastructure and tests