Simplified testing for custom Pool and Item classes

This Pull Request breaks out the Item and Pool tests into Abstract Classes which let you define which class they're testing against. This allows custom classes to run through the same testing suite that the core classes do, ensuring compatibility with the API and the functionality itself.