code: public CopyWriter copyTo(BlobId targetBlob, BlobSourceOption... options) {
      CopyRequest copyRequest =
          CopyRequest.newBuilder()
              .setSource(getBucket(), getName())
              .setSourceOptions(toSourceOptions(this, options))
              .setTarget(targetBlob)
              .build();
      return storage.copy(copyRequest);
    }
docs: Sends a copy request for the current blob to the target blob. Possibly also some of the
  metadata are copied (e.g. content-type).
  
  <p>Example of copying the blob to a different bucket with a different name.
  
  <pre>{@code
  String bucketName = "my_unique_bucket";
  String blobName = "copy_blob_name";
  CopyWriter copyWriter = blob.copyTo(BlobId.of(bucketName, blobName));
  Blob copiedBlob = copyWriter.getResult();
  }</pre>
  
  @param targetBlob target blob's id
  @param options source blob options
  @return a {@link CopyWriter} object that can be used to get information on the newly created
  blob or to complete the copy if more than one RPC request is needed
  @throws StorageException upon failure