This adds a new implementation of BalancedVMChooser. The previous one
wasn't functioning when reducing VMs on a host to zero and the logic was
rather opaque. This breaks out a lot of the implicit logic and adds some
basic tests.