FOR REVIEW: new protocol-based service API

This is still a WIP in that I know I need to submit a few more commits to update docstrings and docs, but I think I'm code-complete, so review would be appreciated.