Add BuildDiscreteUniformFactor.

When observations don't exist, or we just want a shorthand/easy
  definition that we can extend during other training.
This creates a conditional probability table with uniform
  probabilities.
Factored out the BuildFactorBase, a handful of features that
  both BuildDiscreteUniformFactor and BuildDiscreteFactor
  need in identical ways.  Hopefully that won't be too complicated.