Improve edge case handling

This PR covers the following:
-  Clean up `Sprig::Reap::Association` by using some of the built-in methods on  `ActiveRecord::Reflection::AssociationReflection`
- Handle `belongs_to` associations that can be `nil` (would previously throw an error)
- Deal with model attributes that are wrapped by Ruby objects by using `read_attribute` instead of `send` (should fix #5)
should you explicitly close these when you're done?