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)
or just put a bird on it

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html#uuid-method