Manage configuration in a block

* Define configuration in a block, not as arguments to the client
Raise errors when improperly configured

* Define a custom ImproperlyConfiguredError
* Ensure that error messages suggest next steps