ENH: Add ID framework to prevent same parent multiple times

In order to computations be correct in the nodes, the parents must have
independent posterior approximations. This does not hold if a node is
parent in several roles for another node because then those parent roles
are dependent. Even intermediate deterministic nodes do not help because
the deterministic node depends on its parents. It is ok to have a node
as a parent of another node via several paths if there are intermediate
stochastic nodes.

ID framework checks for these problems. Each stochastic node has a
unique ID and each deterministic node has a list of its parents' IDs.
Then, when creating a node, it is checked that there all IDs of the
parents are unique, that is, there are no duplicates.