Rework the API around a bunch of multimethods
Add the old API back as an imp'l of the API methods