Change the way Boolean Clause branches with multiple terms are scored

The previous implementation combined weights from multiple terms in a branch by
multiplying them together.  This, it turns out, doesn't work very well, so we
move to a system where the score for a branch is calculated by a pluggable
WeightCombiner.  The default implementation selects the lowest weight of all the
branch's consitutent terms as the weight for the branch.