Add `SalesforceError` as base API exception

It can maybe be extracted into an `exceptions` module