API Overhaul
See my commit message for a little more detail. This is big enough that the git diff doesn't really give you a good idea of everything I did, so maybe take a look at the actual source/documentation as well.
As of opening this PR this API is untested. I'll be doing some testing over the next few days, but I don't recommend merging yet. Merging with a new branch would be an option too.