Merge from master
Auto scaling instance lifecycle state support - EUCA-5190

Instances are now created in the Pending state and transitioned to
InService when a health check passes. Termination of an instance sets
the state to Terminating. If termination fails for any reason then the
operation will be retried until is succeeds (subject to the usual back
off)

LifecycleState is updated to provide a function to transition instance
states. PersistenceAutoScalingInstances exposes a new method to move
instances between states.

AbstractOwnedPersistents now provides a convenience method for
transactions with retries.

CollectionUtils is updated with some convenience methods for filtering
on object property values and evaluating predicates/functions for
iterables.

EUCA-5190
Auto scaling now finds and terminates untracked instances - EUCA-5196

ActivityManager is updated to periodically find all tagged instances for
an account and terminate any untracked instances. AutoScalingInstances
exposes a new method for verification of instance identifiers for an
account.

EUCA-5196
terminate instances when load-balancers are deleted
updating database after terminating LB instances
EUCA-5212: query/soap binding for the second-step operations in ELB; contributed by Ken Edwards
EUCA-4917: More robust implementation of the loadbalancer vm
- when a new loadbalancer is created, a new vm is spun off as system user
- the initial parameters are made available to vm servo (tooling around haproxy) through instance userdata
- create-load-balancer can specify more than one zone; VMs will be launched per zone
- when the loadbalancer is deleted, all VMs servicing the loadbalancer is terminated
- TODO: security group should be created when a new loadbalancer is created; the ingress rule should be updated as a result of listener update
Auto scaling load balancer add and remove instances - EUCA-5007

ActivityManager is updated to add and remove instances from the load
balancers registered with the group on launch and termination
respectively. New tasks are added for load balancer support and the main
scaling entry point is updated to perform retries for register and
deregister operations.

AutoScalingInstance now has a ConfigurationState which tracks the
current configuration level of each instance. Their is also a counter
for tracking registration and deregistration attempts.

CollectionUtils is updated to allow a reduction to minimum value for an
Integer collection.

EUCA-5007
Removed duplicate field map bindings for fields annotated with @HttpParameterMapping in BaseQueryBinding.java
Auto scaling load balancer health checking - EUCA-5010

ActivityManager now supports ELB health checking. A new ELB health check
task is added and runs on success of the EC2 health checking task. The
unit test for ActivityManager is updated to cover health checks.

EUCA-5010
EUCA-4917: security group creation/deletion
 - a new security group is created when a loadbalancer is created
 - the security group is deleted when the loadbalancer is deleted and all the associated servo VMs are terminated
Implemented the following features
EUCA-5143 Cloudwatch PutMetricAlarm
EUCA-5144 Cloudwatch Describe Alarms
EUCA-5145 Cloudwatch DeleteAlarms
EUCA-5146 Cloudwatch DescribeAlarmHistory
EUCA-5147 Cloudwatch DescribeAlarmsForMetric
EUCA-5148 Cloudwatch EnableAlarmActions
EUCA-5149 Cloudwatch DisableAlarmActions
EUCA-5150 Cloudwatch SetAlarmState
EUCA-4917: security group creation/deletion per loadbalancers

Merge branch 'dev/spark/services' into team/clc-dev/services
Auto scaling zone rebalancing for configuration changes - EUCA-4995

Auto scaling availability zones are now rebalanced on configuration
change.

ActivityManager is updated to check if rebalancing is required whenever
a group requires scaling. The scaling required flag for a group is now
used to indicate rebalancing or capacity change is required.

AutoScaling group now exposes methods to update the desired capacity or
the availability zones to use. AutoScalingService uses these new methods
which ensure the scaling flag is set when necessary.

HealthStatus is updated to support use as a predicate for auto scaling
instances.

EUCA-4995
Auto scaling zone rebalancing for zone failures - EUCA-4995

Auto scaling availability zones are now rebalanced on failure or
recovery of a zone.

ActivityManager is updated to coordinate a persistent record of the
currently unavailable zones and to ignore unavailable zones when
launching instances.

AutoScalingGroups is updated to allow groups to be marked as requiring
scaling by zone, this is used when a zone state changes.

A new ZoneUnavailabilityMarker class is added to record unavailble zones
to the database. The ZoneUnavailabilityMarkers interface and
PersistenceZoneUnavailabilityMarkers implementation are added to manage
ZoneUnavailabilityMarker entities.

ZoneMonitor is added for in-memory tracking of zone availability. The
ZoneMonitorEventListener will periodically cause ZoneMonitor to process
zone availability.

EUCA-4995
Query API binding errors now use 400 HTTP status code - EUCA-5327

Query APIs now use a 400 status code for binding errors, previously a
412 status code was used.

EUCA-5327
Auto Scaling suspend and resume processes operations - EUCA-5001

AutoScalingService is updated to implement suspended/resume processes
operations.

AutoScalingGroup now tracks suspended processes. A new SuspendedProcess
entity records that a ScalingProcessType is suspended along with a
reason for the suspension. AutoScalingGroups is updated to include
suspended process information in the description for a group.

ActivityManager now checks if a process is suspended before performing
work.

EUCA-5001
Auto scaling add support for DescribeScalingProcessTypes - EUCA-4998

AutoScalingService is updated to implement the new operation. A type
mapper is added to AutoScalingGroups for conversion to the response
format.

EUCA-4998
EUCA-5358 update policy spec with load balance operations
EUCA-4934: Configure euca name server
 -- when a new loadbalancer is created, updateARecord of Dns Service is called
 -- when the loadbalancer is deleted, removeARecord of Dns Service is called
 -- naming scheme for the loadbalancer A record: {loadbalancer_name}.{loadbalancing.loadbalancer_dns_subdomain}.{system.dns.dnsdomain}
 -- TODO: the current implementation doesn't allow 1:N relation between dns and ips; should modify DnsService to allow this