[libqofono] Added 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 different
modem interface objects consistent with each other.

Doesn't touch the public API but completely breaks ABI.
[libqofono] Restore public ABI

All public methods that were present earlier have been restored. This
doesn't guarantee binary compatibility with the clients that were directly
using private methods but it's their fault.

Objects have the same size as before the ABI break, so even the code that
allocates libqofono objects on stack might work. At least it won't crash.