A Factor knows about a set of variables and can score any assignment to those sets of variables.
A Model is a factor graph with all variables and all factors.
A Variable has a domain and an optional name.
Implements basic belief propagation for computing variable marginals in graphical models.