Re-working exception handling to reduce code duplication, ease base controller
class abstraction.

Adding additional exceptions.

Adding unit tests for exceptions based on API response HTTP status code.