Refactor the Dockable API (again).

I decided that we probably shouldn't have the Dockable itself consider what widgets to dock to, since we already locked up all that data within DockingController where it should be. So now the control flow is much simpler and lets us separate our concerns better