Agree on having an interface for this, and @aledsage's comments on possible class names, and I suspect we don't have much backwards compatibility to worry about here. Should probably have been marked `@Beta` from the start, but maybe do this in another PR.