Introduce `ProviderFactory#zip` This method takes two providers, a function which arguments are the types of the providers and returns a new provider which value is computed using the combiner function. The potential dependencies of the inputs are tracked.
This allows binding providers together and facilitates computation of values which depend on the value of two providers.
Currently there's only a zip function taking a pair of providers.
It would be nicer to have this method on `Provider` directly so that we don't have to call the provider factory, but the required infrastructure isn't available at this location in the code.