api overhaul. DO NOT MERGE

Major restructuring of how the API works internally.

Do not merge yet. I've left a lot of the methods blank. For now, let me know what you think of the new way of specifying API endpoints.
Wanna just make this something like `raise need.exception()`? Or wanna explicitly have to create an exception.