tidying up - separated interfaces from implementation, added IoC
unit tests scaffold project
Merge branch 'refactoring'