Datastore is now an interface using the abc module

Cleaned up datastore module with abc abstractmethod decorators. No need to create NotImplemented methods explictily.
No magic strings please:
```python
data = {
    'datastore': [
        {'key': 'Zurich'.encode('hex')},
        {'key': 'CH'.encode('hex')}
    ]
}
self.db_mock.selectEntries.side_effect = data.__getitem__
```