First commit :
1. Building tests
2. Core class implementation
3. factory interface creation
4. Custom exception adding