This commit adds a virtual method to QgsMapLayer to enable the creation of custom
elevation profiles for any type of layer.
The methods returns a pointer to a helper class of type
QgsAbstractProfileSource which is a factory for profile generators
(cf. documentation for QgsAbstractProfileSource).
Existing layers that derive from QgsAbstractProfileSource just override
this method returning a *this* pointer.
As the method is *sipified* it can be used in python to declare custom
profile source for classes derived from PluginLayer (ownership of the
QgsAbstractProfileSource must then be managed on the python side).
sip doesn't use the standard Python staticmethod type for defining
static methods, which means that standard means of testing
for a static method (like `isinstance(..., staticmethod)`) fail
with any PyQGIS static methods.
This causes issues with lint tools, which incorrectly flag
calls to QGIS static methods as missing self arguments. It also
breaks detection of static methods in the sphinx PyQGIS docs,
so all static methods are shown as non-static.
Work around this in sipify, by wrapping unambiguously static
methods in staticmethod wrappers.