Abstract Eo classes are now proper C# abstract classes.
As a side effect, returning Eo instances from native code was reworked
to return instances of their actual Eo classes instead of previous
behavior of returning a generic Efl.Object and using static_cast.
Instead of var window = Efl.Ui.Win.static_cast(widget.GetParent());
Use var window = widget.GetParent() as Efl.Ui.Win;
Another side effect was that efl_constructor was removed from the list
of supported Efl.Object overrides. It is invoked inside
efl_add_internal_start, before the bindings makes the association of
the newly created EoId with the C# instance that created it, making the
managed delegate meaningless. C# users then can use regular C#
constructors to initialize fields.
Also changed to set the private data of C#-inherited classes before the
call to constructing methods (aka constructor parameters) so C# classes
can override them correctly.