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)
you might want to put it into a sub folder to avoid name conflicts. maybe follow the carrierwave naming scheme of model name, record id, filename: e.g. `/users/1/pretty_picture.png`?