refactor: generic I/O classes
Add conditional assignment + bugfixes

1 test added : test_conditional_assignment()
control_flow.py added to implement the new ConditionalAssignment element
bugfixes (these should probably have had their own unittest):
-> base.py Element::set_value() should set blocked = False, otherwise elements stay blocked forever once set.
-> io_functions.py OutputData::result() should return None if blocked