Using the collections abstract classes for list and dict.

**The problem:** this kind of code was not possible:
```python
# registry is just like a dict.
app.extensions['registry'].update(
    pathns=ImportPathRegistry(...),
    myns=ModuleDiscoveryRegistry(...),
)
```

**Changes:**
* Properly implementing `dict` and `list`-like classes via [the collections abstract classes](https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes).
* Flake8 :heart: 
* Refactoring of the `__init__.py` file, the classes have been moved to the `base` module.