mv BA * TS sync product functions from algorithms to products module

so that sync_prod branch can be rebased (after separating the changes to those on the products module).
conditional on exception only
fix imports and tolerate cyclic import

of ba_ts_sync_prod in automata from products
and ts_ba_sync_prod in transys from products
inline convert_ts2ba_label
use set comprehension
extract find_ba_succ, find_prod_succ

to modularize, so that the successor-generating functions (that implement the semantics of BA * TS) can be shared among the explicit and on-the-fly products
replace MathSet by set, because mutable states not supported any more
more logging in transys.products
new: tests for transys.transys
new: OnTheFlyProductAutomaton

to incrementally build the automaton from a TS and a BA.
It has methods to add the successors of a specific state to the state space and to iteratively repeat this until the state space does not increase any more.

find_prod_succ has been adapted to recognize whether it is given a product BA or a product TS, and annotate it accordingly.
This allows using it in both OnTheFlyAutomaton.add_successors and ts_ba_sync_prod.
Ideally the latter should be implemented by creating a generic OnTheFly class and calling its "add_all_states" method.
bugfix: do not use next_sqs twice
housekeeping
reduce type checking in ts_ba_sync_prod