Added
- Add max timeout per scraper thread (20min) - once it's reached, the thread
gracefully exits. This prevents one long-running or hung thread from causing
and infinite block on whole execution. `Provider` classes need to check for
`self.stopped() -> bool` during execution cycles.
- Add provider for `sms-online.co`
Changed
- BREAKING: Change class spec of `NumberProvider`: it now directly inherits from
`threading.Thread`. `def scrape(self)` was renamed to `def run(self)`, callback
`Writer` is now provided via class constructor