Execute recipes based off IP addresses

It adds the ability to execute recipes while passing in either a list of ip addresses or a by an EIP.

Rollback Plan
-------------
* To roll back this change, revert the merge with: `git revert -m 1 MERGE_SHA` and perform another deploy.

URLs
----
> Links to bug tickets or user stories.

QA Plan
-------
> Fill in scenarios below. Review [QA Best Practices](https://source.sportngin.com/page/show/1227795-qa-best-practices).



This line is a bit dense.  I would consider breaking it up a bit:

```ruby
def self.find_by_ip(client, ips)
  new(client).instances_matching_ips(ip_addresses)
  instances.empty? ? nil : instances
end

# Find instances matching the inputed IPs
def instances_matching_ips(ip_addresses)
  data.reject do |instance|
    instance_ips = [instance[:public_ip], instance[:elastic_ip], instance[:private_ip]].compact
    (ip_addresses & instance_ips).empty?
  end
end
```