Merge pull request #970 from aledsage/feature/cluster-across-availabilityZones

Feature: DynamicCluster across availability zones
Add SUBNET_ADDRESS attribute to SoftwareProcess

- adds HasSubnetHostname.getSubnetIp()
- getSubnetHostname() really returns the hostname (rather than ip)
  if it can.
JcloudsUtil ComputeService cache: include endpoint

- if two getComputeService requests have different endpoints configured,
  don't return the same instance.
Fix JcloudsLocation.rebind for other aws-ec2 regions

- previously only worked for default (us-east-1) region
- now include region name when passing in id
Add JcloudsLocation.CLOUD_AVAILABILITY_ZONE_ID

- set CLOUD_AVAILABILITY_ZONE_ID and CLOUD_REGION_ID on JcloudsSshMachineLocation
- useful for e.g. cassandra where want to determine datacenter:rack,
  which can correspond to aws-ec2 region:availability-zone.
Cassandra: make snitch configurable
Adds AggregatingMachineProvisioningLocation
Adds PolicySpec

- so that one can specify policies on an EntitySpec, e.g. in a
  DynamicCluster where the entitySpec will be used to create
  multiple entities
Custom cassandra MultiCloudSnitch

- this needs to be put into the cassandra code-base, and a
  pull request created for it there.
ServiceReplacer: avoid infinite loop

- if starting a replacement keeps on failing, and we keep getting
  events about the failures, then don't keep responding to the events.
  Instead abandon attempts if more than a given number of failures
  in a given time period.
Fix type in SoftwareProcess: "start" was called "stop"
Fix for deadlock in sun.reflect.annotation.AnnotationType

- See https://github.com/brooklyncentral/brooklyn/issues/974
- only call contextBuilder.build() once at a time
squash ServiceReplacer infinite loop
CassandraNode: snitch config and MultiCloudSnitch

- Correct private/public IP for Ec2MultiRegionSnitch
- Support for custom MultiCloudSnitch
-- including upload of MultiCloudSnitch jar, if configured
- TODO have checked in jar for MultiCloudSnitch (tut tut)
  as resource so it can be uploaded
Add CassandraCluster.DATACENTERS attribute

- the set of datacenters (as opposed to DATACENTER_USAGE which is
  a multi map of datacenter names -> entities)
Remove unused CassandraClusterImpl.sshFeed
Add CassandraFabric (for wide-area cluster)

- CassandaCluster configurable with SEED_SUPPLIER
- CassandraFabric aggregated seeds from clusters
CassandraCluster app variants

- simple, high-availability and wide-area cassandra clusters
Cassandra tutorial (in docs)
Support JcloudsLocation.STOP_IPTABLES