Middleware to set provider field on messages

This needs at least two versions (or one version with at least two modes, although I prefer splitting them):
 - always set the same statically-configured `provider` value
 - select `provider` value based on `from_addr` prefix

We can probably write this all as:
```python
self.provider_prefixes = sorted(self.config["provider_prefixes"].items(), key=lambda item: -len(item[0]))
```
Not entirely sure which is more understandable.