HUGE refactor, started gui

refactored model data so only necessary classes form part of the public
api. As result some tests are now commented out until I can find a
sensible way to test the non visible classes/methods. Started work on
the gui