Reliably delete a container with its objects

This PR is a (hopefully) final attempt at providing a method to reliably delete a container along with its constituent objects. The crux of the algorithm implemented by this PR is:

1. Get the list of objects in the container.
2. Attempt to delete them using the batch delete API.
3. Attempt to delete the container using the container delete API.
4. If step 3 succeeds, we are done!
5. If step 3 results in a `409 Conflict` error (indicating that the container is not actually empty), start over with step 1.
6. If step 3 results in a `404 Not Found` error (indicating that the container is not found), we are done!

Note that the existing methods to delete a container (`$container->delete()`) and to delete a container along with its objects (`$container->delete($deleteObjects = false)`) are preserved so this change is backwards compatible.

Additionally, another method to delete a container along with its objects is also provided (`$container->deleteWithObjects($secondsToWait = null)`). This method takes an optional timeout in seconds during which the above algorithm must complete. If this timeout is not specified, it is estimated based on the number of objects in the container.


This will use the currently loaded version of `X-Container-Object-Count` which is not what you want, I think. Consider the situation where the container is initially loaded (either by a HEAD or GET), a user uploads 500 objects, and then re-uses the same object in memory to delete. This object would contain the object count _before_ uploading the objects. IMO, we either need to do a HEAD request or not generate the timeout based on the object count