Add Factor to BuildDiscreteFactor.

Instead of using a hash, using a well-defined data entity
  that can be used in other classes.
Add Variable.

Using a data entity: Variable. It enforces the structure/use of the
  data in all arenas.
Add Graph as a data entity.

Uses a very simple graph structure.  No traversal or node
  relationships are implied at this level.  Just a consistent
  entity definition.