In preparation for more QC modeling, clean up the dht_state API.

Rather than having a score of different functions, merge functions that are
much like each other into one function path with an option list on top of it.
I believe this is easier to read for another programmer, since it just lets the
option list vary, rather than having to understand 2-3 different names which
are not that obvious in the first place.

Also kill the inverted logic of safe/unsafe. Pings were one way around while
insertion were the other way around. This is highly problematic.
Coalesce notifications to the routing table into a `notify/2` call.

This simplifies the interface further. There are three different possible
notifications, which all look kinda the same from the outside. Rather than
having three different functions, build this on one function only and use
variants in the form of atom()'s in order to keep the different kinds of
notifications apart.