WIP Almost complete refactoring and unit testing of routingtable. Minor refactoring of kbucket.

Very WIP. I will describe tomorrow; really tired now.

### Bugs found:
* Many operations are potentially thread-unsafe.
* The `replacement_cache` isn't synchronized once a `KBucket` is split.
what about doing the same in case the refresh timeout has been reached?

```
    refreshTimeoutReached = int(time.time()) - bucket.lastAccessed >= constants.refreshTimeout
    if force or refreshTimeoutReached:
        ...
```