Bug 846543: Generalize async operations, use that in the BMM API; r=mcote

This also adds support for asynchronous HTTP requests, and uses those
from the request machine.
Bug 826746: notify mozpool when lifeguard is done with an operation; r=mcote

This notifies when entering the 'ready' or 'failed_*' states.

Mozpool also tries another device when it gets a failed-bad-device
result from lifeguard (bug 819085)
Bug 837241: prefer SUT over ping when it's available; r=mcote
Bug 834568: self-test on failure, related changes; r=mcote

In addition to self-testing on failure, this does a bunch of little things:
 * eliminate the free state
 * show requests in the lifeguard UI (with API change)
 * makes failed-request states expirable
 * eliminates the now-unnecessary 'closing' request state
 * power-cycles during the sut_verifying process, per dividehex's suggestion
Bug845428: Moves ProXR commands into a single sock.send()
Merge pull request #1 from dividehex/bug845428

Bug845428: Moves ProXR commands into a single sock.send()
bump to v3.0.0