backend: clean up

make the CONTAINER_DISABLE code much more similar to the standard code.

Use exceptions to pass errors.

Move the management of the .Root object to the container, so that the object
and the getter and setter are declared in the same class (instead of only
being present in one child).

change signature of createInNewContainer to return both the container and the component.
All the callers had to look for the container afterwards, so better just pass it.
model: change .children to be a VA containing a set

Allow .children to be dynamic by making it a VA, instead of a roattribute.

Also simplify structure by merging the actuators, emitters, detectors of the microscope into
children.

Still support the old syntax in the yaml files.
drivers: update some usage of the .children VA
gui settings: drop default choices if outside of range

finally finishing this long time TODO now that there is a need with the DELPHI.
gui settings: skip children VA to display

now that .children is a VA, the default behaviour is to display it in the GUI,
but that's not a good idea, so hard-code this VA as not to treat.
odemisd: don't complain about components having multiple parents if one of them is Microscope

Pretty much any component has Microscope as parent, and we know for sure that
it will never create its own ones.
So components created by delegation are always created by the other component.
odemisd: no need for special case for Microscope in is_leaf anymore

now that microscope has a "children" attribute, it can be handled normally.
odemisd: new methods to be able to instantiate components online

Still all done at initialisation, but now it's just a matter of running the microscope container as
soon as the microscope is ready.
odemisd: update VA and affects after a component is instantiated

now should be fully like previously.
odemisd: clean up
odemisd: move instantiation code to the backend container

Still no behavioural change, just reorganising code to be closer to what it should look like.
odemisd: component instantiation now happens in a separate thread

Still only support starting the component once.
Will need new VAs on the microsope to support dynamic start-up.
odemisd: make dry run try fully again

and also remove the CONTAINER_DISABLE option which was a lot of code actually never used.
model: update VAs to Components and Microscope

.affects is now a VA (still to be seen if worthy) that is a list of str (instead of components)
=> Much easier to solve cyclic dep problems

.alive and .ghosts should contains the components respectively running and non-running

.model should contain a copy of the model AST.
odemisd: automatically retry components that failed to start

new exception: HwError

The instantiation thread has a list of failed components to not immediately retry, to
avoid retrying too fast.

Also extend simulated.Stage to fail to instantiate if 'stage.fail' file is present,
for testing purposes.
model: introduce the state VA and its constants
odemisd: start upgrading mdupdater to become dynamic

still need the main part: subscribe to .alive
odemisd: update md updates when the components change

listen to .alive
odemisd: don't try to stop the containers twice on normal ending

once the container is closed, a call to terminate fails badly, which is not nice
at least in the log, and it's not useful to try to kill everything twice anyway.
driver pigcs: raise HwError in case of recoverable hardware error

allows the backend to automatically try reconnecting.