The goal with this diff is twofold:
- Make Metadata a private API.
- Allow apps to create custom operators.
Doing #2 requires that we simplify the signatures for our foundation operators such that they don't require providing a Metadata instance. This change also had the nice effect of cleaning up most of the operator implementations.
Metadata is not yet a private API, but all of its internal APIs are. Making Metadata a fully private API requires making Inspectable a private API.