Add BuildslaveManager, hide protocols behind it

This begins to build an abstraction for protocols, so that buildslaves
and other parts of Buildbot will not know or care if they are using AMP
or PB or something else.

The tricky bit is that most protocols will involve a single listener
that the buildslave manager can handle directly, while PB connections
are shared by the PBManager.  For the moment, I've kept the idea of
"registrations" in place, but we should refactor this eventually.
(WIP) adding an abstract Connection class to handle protocol stuff

This involves replacing '.remote' everywhere in the process code with
'.conn', and creating a unique Connection method for each message or
operation on the slave.  I've gotten through most of the slave
initialization for PB, but AMP is completely unimplemented.

Most of the complexity in master/buildbot/buildslave/base.py that deals
with disconnections, keepalives, duplicate slaves, and so on should move
to the protocol classes, where it will be invisible to the rest of
Buildobt.  That will allow us, eventually, to implement automatic
reconnections without any change to the process code.

The Connection.notifyOnDisconnect method uses
buildbot.util.subscription, so it returns an instance which callers can
use to unsubscribe, rather than calling dontNotifyOnDisconnect.  So that
will require a few changes.