5228d869ee
All other functionality can be implemented in terms of these; doing so (while retaining the same API) will be convenient for subsequent refactors.