Add high level class layer to API

This adds a new layer to the API on top of @bc-jackiehuynh's existing work. The new class-based layer is heavily inspired by the excellent Stripe API (stripe/stripe-python), and in the process we end up melding a lot of Jackie's work with several ideas from the old version of the API.

Basic examples of usage are available in the README and examples directory. Test coverage is currently very poor, but will improve over time.

Ping @maetl