Merge Toplevel and AbstractClient
At the moment the added value of the distinction between the both of them is practically nonexistent. We use it to implement Unmanaged and Deleted, but they can just as well be AbstractClients.
This patch changes it so everything is an AbstractClient. This allows us to be sure that the objects we get are always of the right type and to skip casts every time we need to run access certain properties.