Redesign Python-callback mechanism for explicit memory management (Major change)
Generating an ISimulation instance via calling a Python function and the corresponding memory
management has become explicit in the new implementation.
The previous mechanism was based on the (black-box) SWIG special functionality __disown__ which
instructs the Python interpeter to leave memory management of a Python object to the underlying C++ library.
Note that a Python callable which produces an ISimulation instance (wrapped in a Python object)
must be carefully managed so that the memory allocated for the ISimulation instance as well as
that of its Python-wrapper be released after simulation is done.
The new mechanism is introduced in the SWIG header libBornAgainSim.i.
It makes Python calling mechanism and memory management of Python objects explicit,
and hides all the details of Python call and garbage collection form the C++ core.
The previous mechanism of PyFittingCallbacks is completely removed from the BornAgain Sim module
and a new class SimulationWrapper is introduced which encapsulates a C++/Python simulation
takes care of memory management for C++/Python calls.
The Python call and garbage collection mechanism is strictly left to the SWIG API part;
i.e., no 'information leak' to C++ core.
A similar mechanism is implemented in libBornAgainSim.i for FitObjective::initPlot method
which can accept a Python callable to plot a FitObjective instance.
The methods FitObjective::addFitPair and FitObjective::initPlot are rewritten to
adapt to the new mechanism.
The unneeded classes PyBuilderCallback and PyObserverCallback are removed.
There is no need for SWIG 'shared-pointer' and 'director' functionality anymore.
So, the SWIG-produced API simplifies considerably.
Furthermore, the SWIG headers and tweak.py are cleaned up.
Related to #127 (closed)