Fix for issue #142

BP now uses division to send messages to neighbors. This required
several changes outside of BP:

1. There is a new Semiring trait call DivideableSemiRing that defines
semirings with a division operator. This is required since Boolean
semirings cannot do divide. All double semirings have a division
function defined, where divide by zero always produces zero.
2. In Factor, there is a new function called combination, which combines
two factors according to a combination function. The product function i
n factor now just calls this function with semiring.product. In BP, it
calls combination with a division function.

This also fixed several failing tests due the reverting the combine
factors operation.