Add ability to "allocate" implicit storage
Previously, it was not possible to call Allocate or Shrink on an implicit storage. The reason for this is that the implicit storage does not represent any real memory and any attempt to modify it is wrong.
However, there are some rare cases where ArrayHandle will attempt to "allocate" the storage even when behaving in a read-only manner. The use case this is being created for is when an ArrayHandleImplicit first calls ReleaseResources and then calls ReleaseResourcesExecution (or anything else that tries to get a control-side portal). In this case, the ReleaseResources makes the control side portal invalid and the ReleaseResourcesExecution attempts to make it valid again by allocating the storage to size 0. This change solves the problem by allowing the implicit storage to be "allocated" to something smaller than originally created.