Simplify DeviceListener/HostController self-deletion mechanism in forwarder2.

Those objects which have similar lifetime characteristics can be deleted in two
different ways:
- Their internal thread requested self-deletion after an error happened.  In
  this case the owner (DeviceController/HostControllersManager) is notified
  on the construction thread through the provided ErrorCallback and deletes the
  given DeviceListener/HostController instance.
- Their owner (DeviceController/HostControllersManager) requested explicit
  deletion. In this case ~DeviceListener()/~HostController() cancels the
  blocking operation on its internal thread which is interpreted by this
  internal thread as an error which in turn triggers a self-deletion. This
  self-deletion *must not* happen since the object is already being deleted.
  WeakPtr is used for that purpose.

This complexity/subtleness which used to be duplicated is now encapsulated in
the new SelfDeleterHelper class used by both the DeviceController and the
HostControllersManager.

BUG=313809
R=digit@chromium.org

Review URL: https://codereview.chromium.org/61933003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@235148 0039d316-1c4b-4281-b951-d872f2087c98
SVN changes up to revision 235148