refactor interfaces into separate namespace
brought tests up to date.  Add exceptions tests
refactor to use traits