Normalize Scheduler Weights

Currently we are using the raw values directly from the available
weighers instead of normalizing them. This makes difficult to
properly use multipliers for establishing the relative importance
between two weighters (one big magnitude will shade a smaller one).

Changes introduced in this commit:
1) It introduces weight normalization so that we can apply multipliers
easily. All the weights for an object will be normalized between 0.0
and 1.0 before being sumed up, so that the final weight for a host
will be:

weight = w1_multiplier * norm(w1) + w2_multiplier * norm(w2) + ...

2) base_weight.BaseWeigher has been changed into an ABC so that we
enforce that all weighers have the expected methods.

3) base_weight.BaseWeigher.weigh_objects() does no longer sum up the
computer weighs to the object, but it rather returns a list that will
be then normalized and added to the existing weight by BaseWeightHandler.

4) Change _weight_multiplier() to weight_multiplier() as a public method

Port from I81bf90898d3cb81541f4390596823cc00106eb20
Related to bp nova-oslo-scheduler

Change-Id: I1b0c7a6e141eee699a191f8a59db90d063eb31ba
Implements part of bp normalize-scheduler-weights
Merge "Normalize Scheduler Weights"