Added
- Added an interface
Changed
- Enabled strict types
- Moved constants from the class to the interface
- Changed references to constants to use the interface constants
- Changed occurrences of new self to new static
- Changed return type declarations to return the interface instead of self
- Formatted code and tests