Uses required_resource_keys to provide Resources objects in the context with *only* those keys. If the user does not specify required_resource_keys in a solid, no resources are provided to the context. This allows us to be more selective about what resources are spun up for different pipeline subset executions.
For example, a pipeline with an expensive resource (such as a Spark context) will spin up the context even if the current pipeline or execution plan subset does not require it. With this change, solids are forced to declare their resource dependencies and therefore only the resources required by the solids about to be executed will be booted up.
Custom types and plugins within types that required resources are not covered in this diff and will be addressed in a following diff.