Add  find_by method support for IronBank records

The following discussion from !837 should be addressed:

- [ ] @tyleramos started a [discussion](https://gitlab.com/gitlab-org/customers-gitlab-com/merge_requests/837#note_263188513):  (+2 comments)

    > @asubramanian1 Thanks for jumping on this!  I had a few comments for your consideration but this looks good.
    > 
    > >  Am hoping that we could get going with this approach, and write a patch the [find method in Queryable class](https://github.com/zendesk/iron_bank/blob/master/lib/iron_bank/queryable.rb#L8) to rescue such operations in a follow-up MR. Let me know what you think.
    > 
    > It's definitely different behavior from `active_zuora`.  I'll throw this out for your consideration as well.  The `IronBank` behavior isn't all that different from `ActiveRecord`, right?  For example, if you use `find` on a model with a bad id, you get an error:
    > 
    > ```
    > > Customer.find(nil)
    > ActiveRecord::RecordNotFound: Couldn't find Customer without an ID
    > from /Users/tyler/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-5.2.3/lib/active_record/relation/finder_methods.rb:433:in `find_with_ids'
    > > Customer.find(123123123123123123123) # invalid id
    > ActiveRecord::RecordNotFound: Couldn't find Customer with an out of range value for 'id'
    > from /Users/tyler/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-5.2.3/lib/active_record/core.rb:182:in `rescue in find'
    > Caused by ActiveModel::RangeError: 123123123123123123123 is out of range for ActiveModel::Type::Integer with limit 4 bytes
    > from /Users/tyler/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-5.2.3/lib/active_model/type/integer.rb:53:in `ensure_in_range'
    > ```
    > 
    > And with `IronBank` you have something like this:
    > ```
    > > Zuora::Account.find('123123123')
    > IronBank::NotFoundError: Body: {"records"=>[], "size"=>0, "done"=>true}
    > from /Users/tyler/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/iron_bank-4.3.1/lib/iron_bank/faraday_middleware/response/raise_error.rb:15:in `on_complete'
    > > Zuora::Account.find(nil)
    > IronBank::NotFoundError: IronBank::NotFoundError
    > from /Users/tyler/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/iron_bank-4.3.1/lib/iron_bank/queryable.rb:9:in `find'
    > ```
    > Notice that ids that are not found also throw errors.
    > 
    > I'd honestly be ok leaving the `find` method as is, but we could implement a `find_by` method on `Zuora::Resource`.  This would be similar to the `active_find_by` on `Zuora::Subscription` (without the additional active condition).  So if we didn't want an error thrown, we could use something like `Zuora::Account.find_by(id: id)` which would be consistent with Rails.  WDYT?

As part of this work, we could review the codebase to look for places where the new `find_by` method could be used instead of `where().first`.  Also, if we implement a `find_by!` method, similar to [the `active_find_by!` method](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/87b0228b135dca04a53e151307fcdbb9cb5ba37c/lib/zuora/subscription.rb#L18), which throws a `Zuora::RecordNotFound` error, we could clean up the implementation in a few places. For example, in [`CreateSalesforceOpportunityWorker#payment_amount`](https://gitlab.com/gitlab-org/customers-gitlab-com/blob/deeef4d1b6dd715f276b46a8b27c738ee7e6d634/app/workers/create_salesforce_opportunity_worker.rb#L54).

Story points: 2.0