Track last allocations to ensure forward-progress

Track the last round of allocations to ensure that we don't starve a
particular label.  If a label made a request but didn't get any nodes
the last time round, it is given nodes preferentially on the next
calculation.

This results in a round-robin allocation during heavy contention.
Note that in the much more usual no-contention case, when everyone is
getting some of their allocations, this makes no change of over the
status quo.

AllocationHistory() is added as a new object to track the request and
grant of allocations.  It is instantiated an passed along with an
AllocationRequeset().  When all requests are finished, grantsDone() is
called on the object to store the history for that round.

By keeping the AllocationHistory object, one could imagine much
fancier algorithms where preference is given proportionally based on
how many prior allocations have failed, etc.  This is intended to
provide infrastructure for such a change, but mostly to be a simple
first-pass at the problem with minimal changes to the status quo.

Change-Id: I0ff9aa74fef807bd84bf51e7ba1ed176c22f5365
Closes-Bug: #1308407
Merge "Track last allocations to ensure forward-progress"