These changes add a generic package-level function to resource,
NewProperty, that creates a new PropertyValue from a plain value.
The primary value of these changes for the time being is the
introduction of the PropertyValueType interface, which documents the
possible types that may be contained in a PropertyValue.
In future changes I would like to unexport PropertyValue.V and replace
it with an exported method, `func (PropertyValue) Value() any`, that
prevents the consumer from sticking unexpected types in a
`PropertyValue`.
Someday maybe Go will have sum types and we can all be happy.
This change expands the definition of `resource.Output` in the Go SDK with additional information about the output, i.e. dependencies and secretness, and adds support in the core Go RPC code for (un)marshaling output values.
Output values are marshaled as special objects ala archives, assets, and resource refs and are unmarshaled as `resource.Output` values.
Subsequent PRs will add:
- A monitor feature for output values, which will initially be disabled by default but available to turn on via an envvar
- Support for (un)marshaling output values in each language SDKs
- A way for providers to indicate support for receiving output values
- E2E tests
- Turn the monitor feature on by default (w/ env var to disable) (Note: the current plan is to initially scope this to only be used when marshaling inputs to a multi-language component)