large refactoring

- Math::Prime -> Math::PrimeEnumerator, Math::PrimeChecker
- cache version for each function
- better dependency injection through #create factory methods
- test separation: unit, integration
- better performance
problem 12