After ChaChaStream / CUDAChaChaStream gets garbage collected its state is still floating around somewhere in memory, which contains the key as well as any unconsumed keystream bytes that are still in the buffer (which may need to be used later on if the keystream is restored from a checkpoint). We should define a finalizer for ChaChaStream and CUDAChaChaStream that zeros out these keys before garbage collection.