* Create abstract model class
* Move detectors/*_detector -> models/*_model
* Update Model class
* Change detectors to models and move fields to self.state
* Use models instead of detectors in PatternDetector
* Update inits in detectors/ and models/
* Add types to resolve_model_by_pattern
* Add types to abstract Model class