ApiRequest and Caller now throw exceptions

Bad credentials will now throw an exception instead of JSON
deserialization errors