Refactor supplicant handling.
On the surface, the biggest change appears to be that we no longer use
However, I think the biggest changes is that the states of
NMSupplicantInterface got cleaned up. Creating a supplicant interface is now an async operation (with a callback). Previously, you would first create the NMSupplicantInterface in an initializing state (one of three such states). Now: you create the NMSupplicantInterface instance asynchronously, and once you have it, it's always tied to a name-owner/object-path pair.
The hardest part (in general, but also w.r.t. supplicant) is managing state. This makes
NMDeviceWifi excessivley complicated. By having the states of the supplicant interface better defined, I think the implementation in NMDevice* can be simplified. That is not yet done, NMDevice* are only adjusted to make it work. I think there is potential to simplify them in the future.