Introduce ReferencedEntities trait to compute referenced entities for a PUT request.

Refactor packages API handler to use new trait and simplify create/update logic.

Mixin ReferencedEntities trait with Rules and Actions API handler.
diff --git a/tests/src/whisk/core/controller/test/PackagesApiTests.scala b/tests/src/whisk/core/controller/test/PackagesApiTests.scala
index a8e4754..f33ccaa 100644
--- a/tests/src/whisk/core/controller/test/PackagesApiTests.scala
+++ b/tests/src/whisk/core/controller/test/PackagesApiTests.scala
@@ -530,6 +530,7 @@
         put(entityStore, provider)
         Put(s"$collectionPath/${provider.name}?overwrite=true", content) ~> sealRoute(routes(creds)) ~> check {
             status should be(Conflict)
+            responseAs[ErrorResponse].error should include(Messages.packageCannotBecomeBinding)
         }
     }
 
@@ -541,6 +542,7 @@
         put(entityStore, reference)
         Put(s"$collectionPath/${reference.name}?overwrite=true", content) ~> sealRoute(routes(creds)) ~> check {
             status should be(BadRequest)
+            responseAs[ErrorResponse].error should include(Messages.bindingDoesNotExist)
         }
     }
 
@@ -614,10 +616,8 @@
     it should "reject delete non-empty package" in {
         implicit val tid = transid()
         val provider = WhiskPackage(namespace, aname)
-        val reference = WhiskPackage(namespace, aname, provider.bind)
         val action = WhiskAction(provider.namespace.addpath(provider.name), aname, Exec.js("??"))
         put(entityStore, provider)
-        put(entityStore, reference)
         put(entityStore, action)
         whisk.utils.retry {
             Get(s"$collectionPath/${provider.name}") ~> sealRoute(routes(creds)) ~> check {