TRUNK-3782:Create generic DAO interfaces and abstract classes

https://tickets.openmrs.org/browse/TRUNK-3782