Fix cluster gating concurrency issue EUCA-7103

Uses a ReadWriteLock. This makes it possible to remove the contention between concurrent run instance allocations but preserves the serialization and mutual exclusion of migrate instance requests:
- Make the Cluster.gateLock be a ReadWrite lock
 com.eucalyptus.cluster.Cluster.gateLock
- Use the Cluster.gateLock.readLock() during (1) node resource allocation and (2) update -- these allow for concurrent access among themselves, but must be mutually exclusive with migrations (the "writers").
 1. com.eucalyptus.cloud.run.AdmissionControl.NodeResourceAllocator.requestResourceToken(Allocation, int, int)
 2. com.eucalyptus.cluster.Cluster.check()
- Use the Cluster.gateLock.writeLock() during migrateInstance(s) -- these must be serialized with respect to each other and also any other allocation or update acceses.
 com.eucalyptus.cluster.Cluster.migrateInstance(String, Boolean, List<String>)
 com.eucalyptus.cluster.Cluster.migrateInstances(String, Boolean, List<String>)
- Increase the gate lock try time to 1 minute -- after that requests will fail synchronously w/ the original indicated error.