refactor(*): model API design after inbox-ios

This is a work in progress --- this will be broken apart into numerous commits
later on before landing.

There are some breaking changes here, but the goal is to be a bit more unified
with the IOS implementation.