Provide client in activity context
Fixes https://github.com/temporalio/sdk-python/issues/721
This needs a bit more work -- as things stand it's attempting to pickle the client in the context in tests of process-based executor pools (which fails when it tries to pickle the RuntimeRef), but I wonder if that means it is attempting to share the client across threads in thread-based executor pools.
I'd be ok for now raising an exception for if the activity.client() is invoked in def activites (so async def activities only for now)
Rebased and ready for review again.
Makes the worker's connected client.Client available in activities as activity.client().
As discussed above, the client is only available in async def activities.