Factored out generics from tests

* Removed generic test classes
* added generic test methods
* Removed duplication
* added xunit data providers