Support all Allocate flags in UnknownArrayHandle
`UnknownArrayHandle` supported an `Allocate` method to change the size of the underlying array without knowing its type. However, it did not give all the features of `ArrayHandle`'s allocate. Namely, you could not specify that the data should be preserved and you could not provide a `Token` object. This change adds these (optional) parameters.