Implement automatic availability zone spread

There are two components to this PR:
 - new functionality in `provider/common` to enable automatic spread of instances across AZs;
 - updates to `provider/ec2` to make use of this common code.

The openstack provider will be updated in a followup.
Renaming to BestAvailabilityZoneAllocations. Not crazy about this name, nor the original, but can't think of anything decent.