Add missing features that are requested.
Complete API redesign and rationalization. As a bonus, we should try to make it easier to formalize.