stronger destroy semantics used in most places, esp in tests
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigYamlTest.java
index 9ede4a1..fcbccfd 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigYamlTest.java
@@ -137,7 +137,7 @@
                     // error, loop wasn't interrupted or detected
                     LOG.warn("Timeout elapsed, destroying items; usage: "+
                             ((LocalManagementContext)mgmt()).getGarbageCollector().getUsageString());
-                    Entities.destroy(app);
+                    Entities.destroy(app, true);
                 } catch (RuntimeInterruptedException e) {
                     // expected on normal execution; clear the interrupted flag to prevent ugly further warnings being logged
                     Thread.interrupted();
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DynamicMultiGroupYamlRebindTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DynamicMultiGroupYamlRebindTest.java
index 2e00269..35c7762 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DynamicMultiGroupYamlRebindTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/DynamicMultiGroupYamlRebindTest.java
@@ -56,7 +56,7 @@
          Enricher enricher1 = app.enrichers().iterator().next();
 
          // Destroy application before first rebind.
-         Entities.destroy(app);
+         Entities.destroy(app, true);
 
          // check that a subsequent change doesn't cause it to re-create
          mgmt().getRebindManager().getChangeListener().onChanged(enricher1);
@@ -100,7 +100,7 @@
       Assert.assertEquals(state.getEntities().size(), 10);
 
       // Destroy application after first rebind.
-      Entities.destroy(appRebind);
+      Entities.destroy(appRebind, true);
 
       // Rebind, expect no apps.
       rebind(RebindOptions.create().terminateOrigManagementContext(true));
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
index a84822a..7994365 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/WindowsYamlLiveTest.java
@@ -134,7 +134,7 @@
     @Override
     public void tearDown() {
         try {
-            if (app != null) Entities.destroy(app);
+            if (app != null) Entities.destroy(app, true);
         } catch (Throwable t) {
             log.error("Caught exception in tearDown method", t);
         } finally {
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogMakeOsgiBundleTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogMakeOsgiBundleTest.java
index f2bd709..122c4a0 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogMakeOsgiBundleTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogMakeOsgiBundleTest.java
@@ -82,7 +82,7 @@
     @AfterMethod(alwaysRun = true)
     public void cleanUpButKeepMgmt() throws Exception {
         for (Application app: MutableList.copyOf(mgmt().getApplications())) {
-            Entities.destroy(app);
+            Entities.destroy(app, true);
         }
         for (Bundle b: bundlesToRemove) {
             ((ManagementContextInternal)mgmt()).getOsgiManager().get().uninstallUploadedBundle(
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
index a0a36ef..5ace40d 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/Entities.java
@@ -721,8 +721,11 @@
 
     /** Same as {@link #destroy(Entity)} but catching all errors. */
     public static void destroyCatching(Entity entity) {
+        destroyCatching(entity, false);
+    }
+    public static void destroyCatching(Entity entity, boolean unmanageOnErrors) {
         try {
-            destroy(entity);
+            destroy(entity, unmanageOnErrors);
         } catch (Exception e) {
             log.warn("ERROR destroying "+entity+" (ignoring): "+e, e);
             Exceptions.propagateIfFatal(e);
@@ -777,7 +780,7 @@
                     public void run() {
                         log.debug("destroying app "+app+" (managed? "+isManaged(app)+"; mgmt is "+mgmt+")");
                         try {
-                            destroy(app);
+                            destroy(app, true);
                             log.debug("destroyed app "+app+"; mgmt now "+mgmt);
                         } catch (Exception e) {
                             log.warn("problems destroying app "+app+" (mgmt now "+mgmt+", will rethrow at least one exception): "+e);
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
index 2e4e0c6..eeb3c67 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BrooklynShutdownHooks.java
@@ -78,7 +78,7 @@
                 semaphore.release();
                 try {
                     log.warn("Call to invokeStopOnShutdown for "+entity+" while system already shutting down; invoking stop now and throwing exception");
-                    Entities.destroy(entity);
+                    Entities.destroy(entity, false);
                     throw new IllegalStateException("Call to invokeStopOnShutdown for "+entity+" while system already shutting down");
                 } catch (Exception e) {
                     throw new IllegalStateException("Call to invokeStopOnShutdown for "+entity+" while system already shutting down, had error: "+e, e);
@@ -229,7 +229,7 @@
             final Entity entity = entityToStop;
             if (!Entities.isManaged(entity)) continue;
             Task<Object> t = Tasks.builder().dynamic(false).displayName("destroying "+entity).body(new Runnable() {
-                @Override public void run() { Entities.destroy(entity); }
+                @Override public void run() { Entities.destroy(entity, false); }
             }).build();
             stops.add( ((EntityInternal)entity).getExecutionContext().submit(t) );
         }
diff --git a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
index faa1fad..db83f0d 100644
--- a/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/effector/EffectorTaskTest.java
@@ -435,7 +435,7 @@
 
                         // Execution completed in the child's ExecutionContext, but still queued as a secondary.
                         // Destroy the child entity so that no subsequent tasks can be executed in its context.
-                        Entities.destroy(child);
+                        Entities.destroy(child, true);
                     } finally {
                         // Let STALL complete
                         synchronized(lock) {
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
index 2fe2432..5465e49 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/EntityExecutionManagerTest.java
@@ -364,7 +364,7 @@
         Set<Object> tags = app.getManagementContext().getExecutionManager().getTaskTags();
         assertTrue(tags.contains(BrooklynTaskTags.tagForContextEntity(e)), "tags="+tags);
         
-        Entities.destroy(e);
+        Entities.destroy(e, true);
         forceGc();
 
         Asserts.succeedsEventually(() -> {
@@ -392,7 +392,7 @@
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
         entity.sensors().set(TestEntity.NAME, "bob");
         entity.invoke(TestEntity.MY_EFFECTOR, ImmutableMap.<String,Object>of()).get();
-        Entities.destroy(entity);
+        Entities.destroy(entity, true);
         Time.sleep(Duration.ONE_SECOND);
         forceGc();
         Collection<Task<?>> t2 = em.getAllTasks();
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
index 6f63bab..51f00a1 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/persist/BrooklynMementoPersisterTestFixture.java
@@ -133,7 +133,7 @@
 
     @Test
     public void testDeleteAndLoadMemento() throws Exception {
-        Entities.destroy(entity);
+        Entities.destroy(entity, true);
 
         BrooklynMemento reloadedMemento = loadMemento();
         
@@ -142,7 +142,7 @@
         assertEquals(Iterables.getOnlyElement(reloadedMemento.getLocationIds()), location.getId());
         
         // Destroying the app should also unmanage its owned location, and adjuncts
-        Entities.destroy(app);
+        Entities.destroy(app, true);
         reloadedMemento = loadMemento();
         
         assertFalse(Iterables.contains(reloadedMemento.getEntityIds(), entity.getId()));
diff --git a/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java b/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
index 96aef9b..fda8433 100644
--- a/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
+++ b/launcher/src/test/java/org/apache/brooklyn/launcher/blueprints/AbstractBlueprintTest.java
@@ -149,7 +149,7 @@
                 for (Application app: mgmt.getApplications()) {
                     LOG.debug("destroying app "+app+" (managed? "+Entities.isManaged(app)+"; mgmt is "+mgmt+")");
                     try {
-                        Entities.destroy(app);
+                        Entities.destroy(app, true);
                         LOG.debug("destroyed app "+app+"; mgmt now "+mgmt);
                     } catch (Exception e) {
                         LOG.error("problems destroying app "+app, e);
diff --git a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyPoolSizeTest.java b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyPoolSizeTest.java
index 16325d2..222877e 100644
--- a/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyPoolSizeTest.java
+++ b/policy/src/test/java/org/apache/brooklyn/policy/autoscaling/AutoScalerPolicyPoolSizeTest.java
@@ -93,7 +93,7 @@
         EntityAsserts.assertAttributeEqualsEventually(cluster, TestCluster.GROUP_SIZE, CLUSTER_INIITIAL_SIZE);
         // Simulate user expunging the entities manually
         for (int i = 0; i < CLUSTER_MAX_SIZE - CLUSTER_MIN_SIZE; i++) {
-            Entities.destroyCatching(cluster.getMembers().iterator().next());
+            Entities.destroyCatching(cluster.getMembers().iterator().next(), true);
         }
         EntityAsserts.assertAttributeEqualsEventually(cluster, TestSizeRecordingCluster.SIZE_HISTORY_RECORD_COUNT, 2);
         Assert.assertEquals((int)cluster.getSizeHistory().get(0), CLUSTER_INIITIAL_SIZE);
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
index 1ecf2d5..2e30ee2 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/BrooklynRestResourceUtils.java
@@ -481,7 +481,7 @@
                         @Override
                         public void run() {
                             if (release)
-                                Entities.destroy(entity);
+                                Entities.destroy(entity, false);
                             else
                                 mgmt.getEntityManager().unmanage(entity);
                         }
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/ActivityRestTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/ActivityRestTest.java
index 6ab67a1..d14e326 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/ActivityRestTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/ActivityRestTest.java
@@ -103,7 +103,7 @@
     @SuppressWarnings("deprecation")
     protected void initEntity(int seed) {
         if (entity != null && Entities.isManaged(entity)) {
-            Entities.destroy(entity.getApplication());
+            Entities.destroy(entity.getApplication(), true);
         }
         
         CreationResult<BasicApplication, Void> app = EntityManagementUtils.createStarting(getManagementContext(),
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EffectorResourceTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EffectorResourceTest.java
index 957f631..a8d3cdf 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EffectorResourceTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/EffectorResourceTest.java
@@ -63,7 +63,7 @@
     @Override
     public void destroyMethod() throws Exception {
         try {
-            if (app != null) Entities.destroy(app);
+            if (app != null) Entities.destroy(app, true);
         } finally {
             super.destroyMethod();
         }
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/machine/pool/AbstractServerPoolTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/machine/pool/AbstractServerPoolTest.java
index 0da5a2e..70fa0c5 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/machine/pool/AbstractServerPoolTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/machine/pool/AbstractServerPoolTest.java
@@ -76,7 +76,7 @@
     public void tearDown() throws Exception {
         // Kills the apps before terminating the pool
         for (TestApplication app : createdApps) {
-            Entities.destroy(app);
+            Entities.destroy(app, true);
         }
         if (mgmt != null) {
             Entities.destroyAll(mgmt);
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
index 7839de2..36a3e5f 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/SoftwareProcessStopsDuringStartJcloudsLiveTest.java
@@ -148,7 +148,7 @@
         executeInLimitedTime(new Callable<Void>() {
             @Override
             public Void call() {
-                Entities.destroy(app);
+                Entities.destroy(app, true);
                 return null;
             }
         }, Asserts.DEFAULT_LONG_TIMEOUT.toMilliseconds(), TimeUnit.MILLISECONDS);
@@ -169,7 +169,7 @@
      * </ul>
      */
     @Test(groups = {"Live"})
-    public void testJclousMachineIsExpungedWhenStoppedDuringStart() throws Exception {
+    public void testJcloudsMachineIsExpungedWhenStoppedDuringStart() throws Exception {
         Map<String,?> allFlags = ImmutableMap.<String,Object>builder()
                 .put("tags", ImmutableList.of(getClass().getName()))
                 .put(JcloudsLocation.IMAGE_ID.getName(), IMAGE_ID)
@@ -193,7 +193,7 @@
         EntityAsserts.assertAttributeEqualsEventually(entity, AttributesInternal.INTERNAL_PROVISIONING_TASK_STATE, AttributesInternal.ProvisioningTaskState.RUNNING);
 
         Stopwatch stopwatch = Stopwatch.createStarted();
-        Entities.destroyCatching(app);
+        Entities.destroyCatching(app, true);
         LOG.info("Time for expunging: {}", Duration.of(stopwatch));
 
         NodeMetadata nodeMetadata = Iterables.getFirst(((AWSEC2ComputeService) jcloudsLocation.getComputeService()).listNodesDetailsMatching(new Predicate<ComputeMetadata>() {
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmExitStatusLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmExitStatusLiveTest.java
index b410449..fa38212 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmExitStatusLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmExitStatusLiveTest.java
@@ -89,7 +89,7 @@
     public void tearDown() throws Exception {
         try {
             try {
-                if (app != null) Entities.destroy(app);
+                if (app != null) Entities.destroy(app, true);
             } catch (Throwable t) {
                 LOG.error("Caught exception in tearDown method", t);
             }
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmStreamsLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmStreamsLiveTest.java
index ec435b3..e1c6f9f 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmStreamsLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinrmStreamsLiveTest.java
@@ -49,7 +49,7 @@
     @BeforeClass(alwaysRun = true)
     public void setUpClass() throws Exception {
         super.setUp();
-        if (app != null) Entities.destroy(app);
+        if (app != null) Entities.destroy(app, true);
         
         location = WindowsTestFixture.setUpWindowsLocation(mgmt);
         machine = location.obtain(ImmutableMap.of());
@@ -76,7 +76,7 @@
     @Override
     public void tearDown() throws Exception {
         try {
-            if (app != null) Entities.destroy(app);
+            if (app != null) Entities.destroy(app, true);
         } catch (Throwable t) {
             LOG.error("Caught exception in tearDown method", t);
         } finally {
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/qa/performance/ScalabilityPerformanceTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/qa/performance/ScalabilityPerformanceTest.java
index a3b064e..3b6e003 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/qa/performance/ScalabilityPerformanceTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/qa/performance/ScalabilityPerformanceTest.java
@@ -237,7 +237,7 @@
                         ManagementContext mgmt = app.getManagementContext();
                         LOG.debug("destroying app "+app+" (managed? "+Entities.isManaged(app)+"; mgmt is "+mgmt+")");
                         try {
-                            Entities.destroy(app);
+                            Entities.destroy(app, true);
                             LOG.debug("destroyed app "+app+"; mgmt now "+mgmt);
                         } catch (Exception e) {
                             LOG.warn("problems destroying app "+app+" (mgmt now "+mgmt+", will rethrow at least one exception): "+e);