Reworked to depend on abstract classes instead of interfaces and generics so that EF support was possible.

Added first unit test