Properly handle conditions when VirtualStorage is null
If an ArrayHandleVirtual is constructed without an underlying concrete array handle, then the Storage<T, StorageTagVirtual> holds a StorageVirtual pointer that is null. Generally, a null ArrayHandleVirtual cannot do much, but its operations should still be correct. There were a few places where the Storage would blindly try to use its StorageVirtual pointer without checking it first. This adds some conditions that should correct the behavior when StorageVirtual is null.
Showing with 69 additions and 16 deletions