Add base classes for modem interfaces

QOfonoModemInterface and QOfonoModemInterface2 classes implement common patterns for QOfono classes that represent modem interfaces with or without properties, respectively. That includes waiting for the interface to appear in the modem interface list, requesting initial properties, getting and setting properties of various types. And it's all asynchronous.

In addition to eliminating a few blocking calls, this allows to get rid of significant amount of duplicate code and makes the behaviour of the different modem interface objects consistent with each other.

Doesn't touch the public API but completely breaks ABI.