node pool and event cleanup

* rename `NodePoolStore` to `NodePoolRepository` and make better use of it by not passing around nodes as much
* replace `NodePoolRepostiroy.__getitem__` calls with `get_by_name()` or `get_node()` to be more explicit.
* Remove `NodePool` interface from `Node` class. Instead just wrap nodes in a `NodePool` when they are added to the repository.
* Make use of the `collections.MappingCollection()` in `NodePoolRepository`