3147: PySDK tests use mock>=1.0 and easier mock side_effect.
3147: Move PySDK HTTP test infrastructure to testutil.

Making this available to other test collections.
3147: PySDK StreamReader instantiates a KeepClient late.

Similarly with API client instantiation in KeepClient, this helps with
testing.  Refs #3693.
3147: Fix variable name typo.

This variable was renamed in previous branch work, but this last user
of it wasn't caught until just now.
3147: Add retry_method to the Python SDK.

This gives us a way to make retry support flexible and consistent
across SDK classes.  Any class that has retryable operations should
take a num_retries argument at initialization.  Then, the specific
methods that implement those operations should also take a num_retries
argument, which will fall back to the instance's setting by default.
This lets SDK users express their retry preferences wherever it's most
convenient for them.
3147: Make PySDK KeepClient.get and put retry_methods.
3147: Add retry support to PySDK StreamReader classes.
3147: Add retry support to PySDK Collection objects.

This required updating the FUSE driver's SafeApi object to better
imitate a real API object, now that CollectionReader will pass it down
to the underlying KeepClient.
3147: Add retry support to Python CLI tools.
3147: Add retry support to PySDK list_all utility.
3147: FUSE driver requires a Python SDK with retry support.

I also took out some of the older log-handling code while I was at it,
since the stricter versioning makes it unnecessary.
3147: Add retry support to FUSE driver.
3147: crunch-job retries data uploads more for longer-running jobs.
Merge branch '3147-py-collection-retries-wip2'

Closes #3147.