Current value-metadata implementation
The ValueMetadata service provides information about how rs-x should handle a value type at runtime, such as whether it should be proxied and whether it is async. It retrieves providers from IValueMetadataList, sorts them by priority (highest first), and selects the first provider for which applies(value) returns true.
Default providers are: ArrayMetadata (8), DateMetadata (7), MapMetadata (6), ObservableMetadata (5), PromiseMetadata (4), SetMetadata (3), and fallback DummyMetadata (-1000).
Rs-x use this metadata to decide whether a value is async (isAsync) and whether it should be proxied (needsProxy).