The interfaces that we use to represent Pulumi plugins are currently
not contextful. This makes it impossible to implement client-side
cancellation and timeouts in an idiomatic fashion. These changes add
context parameters to the plugin interfaces and plumb them upwards
through their callers.
These changes also add a new API to the plugin package,
`NewProviderServer`, that wraps a `plugin.Provider` in a gRPC interface,
allowing it to be used as part of a gRPC server. This makes it simpler
for consumers to author plugins, as they do not need to concern
themselves with the gRPC machinery.