Custom objects

Custom object functionality, docs, and tests
If `setOption()` is called after `api()`, then api calls will not use the new base_url or version.  Guzzle needs to know about the changes or else it only uses what was passed in the constructor.

Originally I didn't make the call to `setBaseUrl()`, but it seemed like the forcing users to create a new client object every time they wanted to change options could be a little more confusing.

I'm not sure if that makes sense - I was mostly reacting to a comment from the last PR saying the base_url/version options were difficult to use.